一个有趣的数学问题和相应的Matlab算法
一个稍稍有点难度的趣味数学问题:有十二个外观一模一样的小球,其中有一个球的重量与其余小球质量不同(不知是比其它球大还是小),其余十一个球重量相等,现在用一个没有砝码的天平来寻找这个与众不同的小球,只能称三次。
大家最好能够先自己想想,经过自己的思考突然间想出来了的那种快乐我觉得是无与伦比的,希望大家能够享受到这种快乐。
我用我想出来的方法编了一个程序,大家先在1到12之间随便输入一个数,那么编号为这个数的球就与其它球的重量不同了(是大还是小是随机的),然后程序就可以马上找出来这个球。
for i=1:12;
a(i)=1;
end
j=input('Which number is different?>');
a(j)=rand(1)*2;
b1=a(1)+a(2)+a(3)+a(4);
b2=a(5)+a(6)+a(7)+a(8);
if b1==b2
if a(9)==a(10)
if a(1)==a(11)
diff=12;
elseif a(1)==a(12)
diff=11;
end
elseif a(1)==a(9)
diff=10;
elseif a(1)==a(10)
diff=9;
end
elseif b1>b2
b3=a(1)+a(2)+a(5)+a(6);
b4=a(7)+a(9)+a(10)+a(11);
if b3>b4
if a(1)==a(2)
diff=7;
elseif a(1)>a(2)
diff=1;
else diff=2;
end
elseif b3<b4
if a(5)==a(9)
diff=6;
else diff=5;
end
elseif b3==b4
if a(3)==a(4)
diff=8;
elseif a(3)>a(4)
diff=3;
elseif a(3)<a(4)
diff=4;
end
end
elseif b1<b2
b3=a(1)+a(2)+a(5)+a(6);
b4=a(7)+a(9)+a(10)+a(11);
if b3<b4
if a(1)==a(2)
diff=7;
elseif a(1)<a(2)
diff=1;
else diff=2;
end
elseif b3>b4
if a(5)==a(9)
diff=6;
else diff=5;
end
elseif b3==b4
if a(3)==a(4)
diff=8;
elseif a(3)<a(4)
diff=3;
elseif a(3)>a(4)
diff=4;
end
end
end
diff
[ 本帖最后由 suffer 于 2006-12-9 09:37 编辑 ] 不错,不过程序完全可以做优化,呵呵 我编的这个程序主要就是想尽量能体现那个识别方法,没有怎么考虑优化的问题
程序挺简单的,主要是先要把方法想出来 原帖由 jt1937 于 2006-11-28 21:56 发表
我编的这个程序主要就是想尽量能体现那个识别方法,没有怎么考虑优化的问题
程序挺简单的,主要是先要把方法想出来
nod,这个问题很久之前就见过 原帖由 jt1937 于 2006-11-23 18:03 发表
一个稍稍有点难度的趣味数学问题:
有十二个外观一模一样的小球,其中有一个球的重量与其余小球质量不同(不知是比其它球大还是小),其余十一个球重量相等,现在用一个没有砝码的天平来寻找这个与众不同的小球, ...
确实可以再做优化,程序我还没想清楚,谢谢楼主
it is a good question
this is a good questionrand four<==> four
if ==
select the left four
...
elseif left>right
...
else
...
end 先睹为快!!!
页:
[1]