论坛: 编程破解 标题: 不知这里有没有人愿意讨论这13个球的问题? 复制本贴地址    
作者: fatcat [xu09]    论坛用户   登录
13个小球,12个相同,一个不同,外表无法分辨出来,现在用天平3次找出不同的那个?
这只是偶在别的地方发现觉得很有意思,所以也拿到我们的论坛里面来讨论讨论,



地主 发表时间: 04/15 11:32

回复: 286 [unique]   版主   登录
是编程实现?还是只讨论方法?
5+5
2+2
1+1


B1层 发表时间: 04/15 12:32

回复: zhouyu [zhouyu]   论坛用户   登录
没有想出来 顶一下希望得到答案

B2层 发表时间: 04/15 22:02

回复: fatcat [xu09]   论坛用户   登录
to286:
能给我们讲解一下你这个算法的思路吗?`
我怎么都想不通你的方法能够把另一个球称出来,因为如果5V5是等的情况,那自然好判断,可是如果不等的话,那你再进入2v2的判断,我认为就是个误区!
还请教你把整个计算过程贴上来~!好让大家学习学习~!
我想不管是编程实现也好还是普通的讲解一下,但要的是大家明白你的思路,知道你是如何实现的~!

B3层 发表时间: 04/16 08:54

回复: 286 [unique]   版主   登录
3+3+3+3+1
前两3如果等,则3、4两组3比。
如果前两3不等。由其中任意一级与第三组(第三组肯定标准)比,能找出不标准有那一组。
由不标准的组中的3个里面再比较一个还是容易的。




B4层 发表时间: 04/16 13:01

回复: 286 [unique]   版主   登录
不对,我再想想。

B5层 发表时间: 04/16 13:12

回复: fatcat [xu09]   论坛用户   登录
我认为if 3V3相等(第一次)
   if 3v3相等(第二次)那就剩下最后一个了。
  elseif 3v3不等(第二次)那我们还要进行第三次判断
     if 1v1不等的话(第三次)
那我们就再也没有机会了啊。
因为前提只要三次比较的啊。
呵呵:)
我第一次的看到这个题目的时候我也想了很多方法,可是很多都是无功而返~
在此声明,我不是在针对286。。呵呵:)感觉上,因为他提出的算法,我都把它推翻了~!其实我只是想讨论也让大家开动一下脑筋,看有什么简便的方法来解答这道题目~!


B6层 发表时间: 04/16 14:26

回复: tz0303 [tz0303]   论坛用户   登录
不会...等结果

B7层 发表时间: 04/16 14:32

回复: trueboy_cn [trueboy_cn]   论坛用户   登录
286已经回答了解题的思路。

B8层 发表时间: 04/16 16:37

回复: zhouyu [zhouyu]   论坛用户   登录
楼上的朋友你明白了请讲一下好吗
我还是没有看懂286兄的思路   我也想过好多方法还是不成

B9层 发表时间: 04/16 17:23

回复: slipshod [slipshod]   论坛用户   登录
我想思路是这样的:4+4+3+2(A+B+C+D)
4V4
I、相等说明在剩下的5个内,就:
A+C V 2C    1:相等,A  V  D
            2:不等,C(左)+C(右) V 2A
II、不等,2A+B V 2A+B
。。。。。。
。。。。。。

注意,出现不等要留意哪边重,当第2次出现不等时,就说明了一些问题!

B10层 发表时间: 04/16 17:37

回复: fatcat [xu09]   论坛用户   登录
把13个球编上号,依次为A[1].......A[13],把问题球定义为A[x]

a:A[1],A[2],A[3],A[4]
b:A[5],A[6],A[7],A[8]
c:A[1],A[2],A[3]
d:A[9],A[10],A[11]
e:A[1],A[2],A[5]
f:A[3],A[6],A[9]
if(a==b) //确定x在9~13中
{
         if(c==d)  //确定x在12,13中
{
if(A[1]==A[12])//确定x为13
x=13;
else //确定x为12
x=12;
}
else if(c>d)//确定x在9,10,11中,并且x比其它球轻
{
if(A[9]>A[10])
x=10;
else if (A[9]<A[10])
x=9
else x=11;
}
else if(c<d)//确定x在9,10,11中,并且x比其它球重
{
if(A[9]>A[10])
x=9;
else if (A[9]<A[10])
x=10
else x=11;
}
}
else if(a>b) // 确定x在1~8中,并且要么为x在1~4中比其他球重或者为x在5~8中比其他球轻
{
if(e>f)//确定x在1,2中并且比其他球重或者x=6并且比其他球轻
{
if(A[1]==A[2])
x=6;
else if(A[1]>A[2])
x=1;
else if(A[1]<A[2])
x=2;
}
if(e==f)//确定x在7,8中并且比其他球轻或者x=4并且比其他球重
{
if(A[7]==A[8])
x=4;
else if(A[7]>A[8])
x=8;
else if(A[7]<A[8])
x=7;
}
if(e<f)//确定x=5并且比其他球轻或者x=3并且比其他球重
{
if(A[1]==A[3])
x=5;
else if(A[1]<A[3])
x=3;
}
}
else if(a<b) // 确定x在1~8中,并且要么为x在1~4中比其他球轻或者为x在5~8中比其他球重
{
if(e<f)//确定x在1,2中并且比其他球轻或者x=6并且比其他球重
{
if(A[1]==A[2])
x=6;
else if(A[1]>A[2])
x=2;
else if(A[1]<A[2])
x=1;
}
if(e==f)//确定x在7,8中并且比其他球重或者x=4并且比其他球轻
{
if(A[7]==A[8])
x=4;
else if(A[7]>A[8])
x=7;
else if(A[7]<A[8])
x=8;
}
if(e>f)//确定x=5并且比其他球重或者x=3并且比其他球轻
{
if(A[1]==A[3])
x=5;
else if(A[1]>A[3])
x=3;
}
}




B11层 发表时间: 04/17 09:53

回复: fatcat [xu09]   论坛用户   登录
这是我一个同学告诉我的解法,大家提提意见,
看是否有什么不对或者多余的地方,或者是否还有更加简便的方法?

B12层 发表时间: 04/17 09:55

回复: erifaw [erifaw]   论坛用户   登录
我认为实现思想:
1个站边,
12个平分称(第一次)
天平一边的6个站边,另6个平分称(第二次)
剩下三个再称一次(第三次);注:这是最坏情况
具体编码实现应该不难,

B13层 发表时间: 04/17 16:39

回复: fatcat [xu09]   论坛用户   登录
嗯!
有理~!

B14层 发表时间: 04/17 17:49

论坛: 编程破解

20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon

粤ICP备05087286号