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

是一道动脑筋题,来源于科学画报的公众账号

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

上述等式中,如果不同汉字表示不同的一位数的自然数(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=604800
i=1;
k=1;
mx=[]; %存放倍数
C=[];%存放 defg,abc
while i<=l
s=[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; %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)
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;



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值