您的位置:首页 > 其它

动脑筋 + 动脑筋 + 动脑筋 + …… + 动脑筋 = 科学画报

2016-07-22 12:02 375 查看
是一道动脑筋题,来源于科学画报的公众账号:动脑筋 + 动脑筋 + …… + 动脑筋 = 科学画报上述等式中,如果不同汉字表示不同的一位数的自然数(0~9),请问在等式成立的前提下,最多可以有多少个“动脑筋”?这是有奖竞猜  所以就奔着这个奖做了一下(贪心是我的天性么?咩哈哈)!动手一做,冥思苦想一番 怎么都想不到合适的一组 沃趣,瞬间觉得自己的智商low爆了!唉,只能交给计算机了(人工智能都可以实现,憋说这个小问题了)。吭哧吭哧编了个matlab小程序实现了结果,并在下面附上小程序 代码1 和代码2(对代码1的改进)运行结果:最多可以有95个动脑筋  9785/103=95哈哈 最后希望我能中奖!!! 感谢计算机 感谢图灵 ~~啦啦啦啦  感谢党 让我变成码农~low low 的代码 1
<span style="font-size:18px;">%%%%%%%%%%%%%%%%%%%
% 动脑筋 + 动脑筋 + 动脑筋 + …… + 动脑筋 = 科学画报
%上述等式中,如果不同汉字表示不同的一位数的自然数(0~9),
%请问在等式成立的前提下,最多可以有多少个“动脑筋”?
%author by 【dcx】
%Copyright 2016.07.22 Xi'an
%%%%%%%%%%%%%%%%%%
%%
%动脑筋=abc 科学画报=defg 这7个数分别来自 0~9中的任意1个自然数
%但是 这个七个数各不相同 同时 a c d 不能为0 故 编程如下
%%%%
%%
clc;
clear;
l=604800; %循环次数 排列组合 A10(7)=10*9*8*7*6*5*4=604800
i=1;
k=1;
mx=[]; %存放倍数
C=[];%存放 defg,abc
while i<=l
s=[0:9];
ss=[1:9];% 为了a c d从中随机取
flag=0;
n=length(s);%数组长度
%% a 不能为 0
na=length(ss);
ia=ceil(rand(1,1)*na) ;%随机获取
a=ss(ia);
s(ia+1)=[]; %释放掉
ss(ia)=[];  %释放掉
%% b
nb=length(s);
ib=ceil(rand(1,1)*nb) ;
b=s(ib);
s(ib)=[];
if b~=0
ss(ib-1)=[];
else
flag=1; %0被取走了
end
%% c 不能为 0
nc=length(ss);
ic=ceil(rand(1,1)*nc) ;%随机获取缩放系数
c=ss(ic);
if flag==1
ss(ic)=[];
s(ic)=[];
else
ss(ic)=[];
s(ic+1)=[];
end
%% d 不能为0
nd=length(ss);
id=ceil(rand(1,1)*nd) ;%随机获取缩放系数
d=ss(id);
if flag==1
ss(id)=[];
s(id)=[];
else
ss(id)=[];
s(id+1)=[];
end
%% e
ne=length(s);
ie=ceil(rand(1,1)*ne) ;
e=s(ie);
s(ie)=[];
%% f
nf=length(s);
iF=ceil(rand(1,1)*nf) ;
f=s(iF);
s(iF)=[];
%% g
ng=length(s);
ig=ceil(rand(1,1)*ng) ;
g=s(ig);
s(ig)=[];
%%  获取满足条件的
%A=abc;
%B=defg;
A=a*100+b*10+c; %abc
B=d*1000+e*100+f*10+g;%defg
if mod(B,A)==0 % defg是abc的整数倍,则取余为0
C=[C;B,A]; %存下满足条件的 科学画报和动脑筋
k=k+1;
mx=[mx,(B/A)];
end
i=i+1;
end
disp('最多可以有的动脑筋数:')
max(mx)</span>
<span style="font-size:18px;">disp('对应的科学画报和动脑筋是:')
C(find(mx==max(mx)),:)
</span>
<strong><span style="color:#ff0000;">改进的代码2</span></strong>
</span></p><p><span style="font-size:18px"></span><pre name="code" class="plain">clc;clear;l=604800; %循环次数 排列组合 A10(7)=10*9*8*7*6*5*4=604800i=1;k=1;mx=[]; %存放倍数C=[];%存放 defg,abcwhile i<=ls=[0:9];% b e f g 可以随意在这里取ss=[1:9];% a c d 不能为0 在这里取%先取 a c d[a,s,ss]=num(s,ss);[c,s,ss]=num(s,ss);[d,s,ss]=num(s,ss);%再去 b e f g[b,s]=num1(s);[e,s]=num1(s);[f,s]=num1(s);[g,s]=num1(s);A=a*100+b*10+c; %abcB=d*1000+e*100+f*10+g;%defgif mod(B,A)==0 % defg是abc的整数倍,则取余为0C=[C;B,A]; %存下满足条件的 科学画报和动脑筋k=k+1;mx=[mx,(B/A)];endi=i+1;enddisp('最多可以有的动脑筋数:')max(mx)disp('对应的科学画报和动脑筋是:')x=find(mx==max(mx));C(x(1),:)
函数 num
function [y,s,ss]=num(s,ss)n=length(ss);i=ceil(rand(1,1)*n) ;%随机获取a=ss(i);s(i+1)=[]; %释放掉ss(i)=[];  %释放掉y=a;
函数 num1
function [y,s]=num1(s)n=length(s);i=ceil(rand(1,1)*n) ;e=s(i);s(i)=[];y=e;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: