jt1937 发表于 2006-11-23 18:03

一个有趣的数学问题和相应的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 编辑 ]

suffer 发表于 2006-11-25 10:58

不错,不过程序完全可以做优化,呵呵

jt1937 发表于 2006-11-28 21:56

我编的这个程序主要就是想尽量能体现那个识别方法,没有怎么考虑优化的问题
程序挺简单的,主要是先要把方法想出来

suffer 发表于 2006-11-29 09:15

原帖由 jt1937 于 2006-11-28 21:56 发表
我编的这个程序主要就是想尽量能体现那个识别方法,没有怎么考虑优化的问题
程序挺简单的,主要是先要把方法想出来

nod,这个问题很久之前就见过

pheigenbau 发表于 2006-11-30 16:51

原帖由 jt1937 于 2006-11-23 18:03 发表
一个稍稍有点难度的趣味数学问题:
有十二个外观一模一样的小球,其中有一个球的重量与其余小球质量不同(不知是比其它球大还是小),其余十一个球重量相等,现在用一个没有砝码的天平来寻找这个与众不同的小球, ...


确实可以再做优化,程序我还没想清楚,谢谢楼主

lygmj 发表于 2006-12-6 14:38

it is a good question

this is a good question


rand four<==> four
if ==
select the left four
...
elseif left>right
...
else
...
end

billjie 发表于 2006-12-9 01:47

先睹为快!!!
页: [1]
查看完整版本: 一个有趣的数学问题和相应的Matlab算法