A{1、2、3、4} B{5、6、7、8} C{9、10、11、12} 12个球分三组 A与B称第一次 i.)A = B D{1、2} E{9、10}称第二次 a.)D = E 1与11称第三次 (1)1 = 11 12重量不同 (2)1 != 11 11重量不同 b.) D != E 1与9称第三次 (1) 1 = 9 10重量不同 (2) 1 != 9 9重量不同 ii.)A != B F{1、2、7、8} G{3、4、9、10}称第二次 a.)F = G 则不同的球在5、6中 1与5称第三次, (1)1 = 5 则 6重量不同 (2)1 != 5 则 5重量不同 b.)F != G 且天平的轻重保持与第一次一样 则不同的球在1、2中 1与3称第三次 (1) 1 = 3 则2的重量不同 (2) 1!= 3 则1的重量不同 c.)F != G 且天平的轻重保持与第一次反向 则不同的球在3、4中 1与3称第三次 (1) 1 = 3 则4的重量不同 (2) 1!= 3 则3的重量不同
分三堆A, B, C各4個絿。 第一次: A vs B 結果: 相等1 或 不等1if(A==B){ 毬在C 中, c1, c2, c3, c4 第二次: c1 vs c2 結果: 相等2 或 不等2 第三次: c1 vs c3 結果: 相等3 或 不等3 都相等, ===> c4, 都不等===> c1 相等2 不等3===>c3, 不等2 相等3 ===>c2 }else{ 假設A中有A1, A2各兩個, B中有B1, B2各兩個 第二次:從A中取出兩個 A2中的一個A2_2放到B, 從B中取走兩個B2放一遍 結果平衡,在B2中(2毬) 記錄下第一次B是輕了還是重了。說明異常毬是輕了還是重了。 第三次:a1 vs a2 得結果 平衡===〉a3, 不平衡看異常毬是輕了還是重了===〉a1還是a2. 結果變化: ===〉A2_2 結果不變化:在A的三毬中a1, a2, a3。A是輕還是重?記錄下。說明異常毬是輕了還是重了。 第三次:a1 vs a2 得結果 平衡===〉a3, 不平衡看異常毬是輕了還是重了===〉a1還是a2.
}
寫錯了一個小地方 ————————————————————————————分三堆A, B, C各4個絿。 第一次: A vs B 結果: 相等1 或 不等1if(A==B){ 毬在C 中, c1, c2, c3, c4 第二次: c1 vs c2 結果: 相等2 或 不等2 第三次: c1 vs c3 結果: 相等3 或 不等3 都相等, ===> c4, 都不等===> c1 相等2 不等3===>c3, 不等2 相等3 ===>c2 }else{ 假設A中有A1, A2各兩個, B中有B1, B2各兩個 第二次:從A中取出兩個 A2中的一個A2_2放到B, 從B中取走兩個B2放一遍 結果平衡,在B2中(2毬) 記錄下第一次B是輕了還是重了。說明異常毬是輕了還是重了。 第三次:b1 vs b2 根據異常毬是輕了還是重了===〉b1還是b2. 結果變化: ===〉A2_2 結果不變化:在A的三毬中a1, a2, a3。A是輕還是重?記錄下。說明異常毬是輕了還是重了。 第三次:a1 vs a2 得結果 平衡===〉a3, 不平衡看異常毬是輕了還是重了===〉a1還是a2.
}
Ivony() ( ) 的方法好像也可以的。
enjoy330(*寒林*) 我觉得你的最后一步有点小问题:結果不變化:在A的三毬中a1, a2, a3。A是輕還是重?記錄下。說明異常毬是輕了還是重了。 第三次:a1 vs a2 得結果 平衡===〉a3, 不平衡看異常毬是輕了還是重了===〉a1還是a2.当结果不变化时没有动的a1、a2、a3及b1都是有可能异常的!不当之处请别见怪!:)
to:Aprcen(东方来风)你的好象不正确啊."依次放入"是不是就称量多次了。违规!
用VB表示如下:'1,2,3,4,5,6,7,8,9,10,11,12 'A(1-4) B(5-8) C(9-12) 'A and B If A = B Then '1-2 and 9-10 If 1 & 2 = 9 & 10 Then '1 and 11 If 1 = 11 Then '12 is bad Else '11 is bad End If Else '1 and 9 If 1 = 9 Then '10 is bad Else '9 is bad End If End If Else '1 & 2 & 5 & 6 and 3 & 4 & 9 & 10 If 1 & 2 & 5 & 6 = 3 & 4 & 9 & 10 Then '1 and 7 If 1 = 7 Then '8 is bad Else '7 is bad End If Else If (1 & 2 & 5 & 6 And 3 & 4 & 9 & 10) = (A And B) Then '1 and 9 If 1 = 9 Then '2 is bad Else '1 is bad End If Else '3 and 9 If 3 = 9 Then '4 is bad Else '3 is bad End If End If End If End If先吃饭,下午考虑13个球的问题
lucidcai() 的题目内容是对的如果"标签全部是贴错的",拿任何一个看看,其他两个都出来了。
to zhuxiaojun2002(车房志之扯坏的领带): 依次放入有称量多次之嫌,但这也是打擦边球,可以说并没称啊!6个对6个难道还不许我一个一个放进去?在放进时就观察呗. 我这个答案也是别人告诉的,以前有人出过这题,说让我们见识一下微软的风格,有时不是那么复杂,是想多了.我不知道人家说的对不对,只拿给大家做参考,也许它就是那么狡猾!
A.(12)4、4、4-->得到一个4,分2、2--> 1、1 --->结果
B.(13)4、4、5-->得到一个4 同A
-->得到一个5,分2、2、1-->如得到 2 同A 如得到一结果出来了
For 水果
当然是先看混合箱了!
想当于 三个箱子 AA BB AB 如果只有一种解决方法,很明显啊! :)
A.(12)4、4、4-->得到一个4,分2、2--> 1、1 --->结果
----------------------------------------------------------4、4、4-->得到一个4 幸运的话称1次,不幸运要称2次
分2、2 两个重量不一样,怎么确定在哪2个里面?
1、1 --->结果 怎么得结果?
A:平衡情况:在余下的未称过的4个里,取其中的三个将2个放在天平的一边,假设放在左边,一个放在右边,第一次平衡的那些球我们可以知道它是正常的,我们称它为标准球,取一个标准球,放在一个的天平一边,用铅笔打个记号,表示他正常,第二次结果有以下几个:平衡A1, 不平衡A2。
A1:显然在唯一一个未称过的那个球,这种情况无法知道它是轻还是重;这是找到了,而且只用到了两次称天平。
A2:如果不平衡,我们可以将下沉的那边的除去标准球外的球标上+,轻的那个标上-号,结果无非在
+、+、-、或-、-、+三个球中,去其中的一个+、-放在天平的一端,取第一次的8个标准球的两个,放在另一端,如果标准球重,显然我们加深-的那个正确,所以那个-球就是我们要找到的,如果标准球那端轻,说明我们+号那个球正确,不管那个都找到了那个坏球。达到目的了。共用到了三次机会。
接下来来解决B不平衡情况:
B:不平衡情况:(此时还有两次机会)
我们可以假设下沉那端可能重,上浮那端可能轻,我们在这里可以用上面一样的方法,用铅笔标上在球上标上+号代表可能重,-号代表可能轻的球。我们在这里假设左边下沉,显然未称过的4个球没有问题,我们可以称其为标准球。然后我们取5个可能不正常的球(即打上+或者-号的球,按3+2取),假设取3个+号的球,2个-号的球,(3个-号的球,2个+号的球的情况同理可证),接下来第二次称重,将++-组合放在天平一端,-+放在另一端,在这一端我们添上一个标准球,这样可以组成3和3的来称 ,注意到我们将原来的一个+球和-球交换了,++-还放在左端,-+和正常的球放在右边,结果有以下几种情况:B21:如果平衡结果不变,说明问题球在左边的++和右边的-里;
B22:如果不平衡情况交换了,说明球在我们交换的两个球里,B23:如果球平衡,说明问题球在没参加天平称重的;
下面的+--三个球中;
下面处理B1、B2、B3情况:
B21:如果平衡结果不变,说明问题球在左边的++和右边的-里,接下来有一次机会找出三个球的,取其中的+-放到天平左端,取标准球2个放在天平的右端,如果左端下沉,说明我们假设+的那个球是正确的,如果左端上浮,说明我们左端那个-号的球正确,,如果平衡的,剩下的那个未参加第三次平衡的那个+号球有问题。
B22:如果不平衡情况交换了,说明球在我们交换的两个球里,我们可以有一次机会确定2个球,一个+和一个-的球中确定,很容易,将他们放在天平左端,利用标准球,放2个标准球在右边;
如果B23:如果球平衡,说明问题球在没参加天平称重的面的+--三个球中;接下来的要做的事是如何用仅有的一次机会去确定三个球假设为+--中找到那个是坏球,地球人都会
假设有问题的那一组为a1,a2,a3,a4.2、我随便拿两个球,比如是a1,a2,我在b或c组中随便拿两个好的球(2b),如果平衡,就是a3,a4中有坏球,如果不平衡就是a1,a2中。3、假设坏球为a1,a2。随便拿个好球(b,c组中都是好球)与a1比较,平衡则a2为坏,不平衡则为a1就三次,简单
怎么一次得到问题球堆??
在天平上是平衡的时候是另外一组,那么在不平衡的时候是天平上哪个组??
A与B称第一次
i.)A = B
D{1、2} E{9、10}称第二次
a.)D = E
1与11称第三次
(1)1 = 11
12重量不同
(2)1 != 11
11重量不同
b.) D != E
1与9称第三次
(1) 1 = 9
10重量不同
(2) 1 != 9
9重量不同
ii.)A != B
F{1、2、7、8} G{3、4、9、10}称第二次
a.)F = G 则不同的球在5、6中
1与5称第三次,
(1)1 = 5 则 6重量不同
(2)1 != 5 则 5重量不同
b.)F != G 且天平的轻重保持与第一次一样
则不同的球在1、2中
1与3称第三次
(1) 1 = 3 则2的重量不同
(2) 1!= 3 则1的重量不同
c.)F != G 且天平的轻重保持与第一次反向
则不同的球在3、4中
1与3称第三次
(1) 1 = 3 则4的重量不同
(2) 1!= 3 则3的重量不同
第一次: A vs B
結果: 相等1 或 不等1if(A==B){
毬在C 中, c1, c2, c3, c4
第二次: c1 vs c2 結果: 相等2 或 不等2
第三次: c1 vs c3 結果: 相等3 或 不等3
都相等, ===> c4, 都不等===> c1
相等2 不等3===>c3, 不等2 相等3 ===>c2
}else{
假設A中有A1, A2各兩個, B中有B1, B2各兩個
第二次:從A中取出兩個 A2中的一個A2_2放到B, 從B中取走兩個B2放一遍
結果平衡,在B2中(2毬)
記錄下第一次B是輕了還是重了。說明異常毬是輕了還是重了。
第三次:a1 vs a2 得結果 平衡===〉a3, 不平衡看異常毬是輕了還是重了===〉a1還是a2. 結果變化: ===〉A2_2
結果不變化:在A的三毬中a1, a2, a3。A是輕還是重?記錄下。說明異常毬是輕了還是重了。
第三次:a1 vs a2 得結果 平衡===〉a3, 不平衡看異常毬是輕了還是重了===〉a1還是a2.
}
————————————————————————————分三堆A, B, C各4個絿。
第一次: A vs B
結果: 相等1 或 不等1if(A==B){
毬在C 中, c1, c2, c3, c4
第二次: c1 vs c2 結果: 相等2 或 不等2
第三次: c1 vs c3 結果: 相等3 或 不等3
都相等, ===> c4, 都不等===> c1
相等2 不等3===>c3, 不等2 相等3 ===>c2
}else{
假設A中有A1, A2各兩個, B中有B1, B2各兩個
第二次:從A中取出兩個 A2中的一個A2_2放到B, 從B中取走兩個B2放一遍
結果平衡,在B2中(2毬)
記錄下第一次B是輕了還是重了。說明異常毬是輕了還是重了。
第三次:b1 vs b2 根據異常毬是輕了還是重了===〉b1還是b2. 結果變化: ===〉A2_2
結果不變化:在A的三毬中a1, a2, a3。A是輕還是重?記錄下。說明異常毬是輕了還是重了。
第三次:a1 vs a2 得結果 平衡===〉a3, 不平衡看異常毬是輕了還是重了===〉a1還是a2.
}
我觉得你的最后一步有点小问题:結果不變化:在A的三毬中a1, a2, a3。A是輕還是重?記錄下。說明異常毬是輕了還是重了。
第三次:a1 vs a2 得結果 平衡===〉a3, 不平衡看異常毬是輕了還是重了===〉a1還是a2.当结果不变化时没有动的a1、a2、a3及b1都是有可能异常的!不当之处请别见怪!:)
'A(1-4) B(5-8) C(9-12)
'A and B
If A = B Then
'1-2 and 9-10
If 1 & 2 = 9 & 10 Then
'1 and 11
If 1 = 11 Then
'12 is bad
Else
'11 is bad
End If
Else
'1 and 9
If 1 = 9 Then
'10 is bad
Else
'9 is bad
End If
End If
Else
'1 & 2 & 5 & 6 and 3 & 4 & 9 & 10
If 1 & 2 & 5 & 6 = 3 & 4 & 9 & 10 Then
'1 and 7
If 1 = 7 Then
'8 is bad
Else
'7 is bad
End If
Else
If (1 & 2 & 5 & 6 And 3 & 4 & 9 & 10) = (A And B) Then
'1 and 9
If 1 = 9 Then
'2 is bad
Else
'1 is bad
End If
Else
'3 and 9
If 3 = 9 Then
'4 is bad
Else
'3 is bad
End If
End If
End If
End If先吃饭,下午考虑13个球的问题
依次放入有称量多次之嫌,但这也是打擦边球,可以说并没称啊!6个对6个难道还不许我一个一个放进去?在放进时就观察呗.
我这个答案也是别人告诉的,以前有人出过这题,说让我们见识一下微软的风格,有时不是那么复杂,是想多了.我不知道人家说的对不对,只拿给大家做参考,也许它就是那么狡猾!
==========================================================可能的话,是猜不出来的,无解。至于拿任何一个出来看看更是无稽,你拿出来一个苹果你知道它里面是苹果还是混合?
所以必须要全错,然后从混合的箱子里面拿,才能判断……
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Collections;namespace _2球
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
} private void button1_Click(object sender, EventArgs e)
{
ArrayList array = GetInt();
for (int i = 0; i < 12; i++)
{
int[] bobs = (int[])array[i];
ShowMessage(bobs);
}
}
private void ShowMessage(int[] bob)
{
int[] z1 = new int[4];
int[] z2 = new int[4];
int[] z3 = new int[4];
int index;
for (int i = 0; i < 12; i++)
{
if (i < 4)
{
z1[i]=bob[i];
continue;
}
if (i < 8)
{
z2[i - 4]=bob[i];
continue;
}
if (i < 12)
{
z3[i - 8] = bob[i];
continue; }
}
ShowMess(z1, z2, z3); }
private void ShowMess(int[] z1, int[] z2, int[] z3)
{
int count1 = 0;
int count2 = 0;
int count3 = 0;
int[] x1, x2, x3;
int[] x4;
//flag用来记录那边重;count1代表左边;
bool flag,flag1;
for (int i = 0; i < 4; i++)
{
count1 += z1[i];
count2 += z2[i];
count3 += z3[i];
}
//如果count1 跟count2不等,表示坏球在这8个球里
if (count1 != count2)
{
if (count1 > count2)
{
flag = true;
}
else
{
flag = false;
}
//从z1里拿出3个球,z2里拿出2个球,z1里把2个球放到右边,z2里拿出1个球放到左边;
x1 = new int[3];
x2 = new int[3];
x3 = new int[3];
x1[0] = z1[0];
x1[1] = z2[0];
x1[2] = z3[0];
x2[0] = z1[1];
x2[1] = z1[2];
x2[2] = z2[1];
x3[0] = z1[3];
x3[1] = z2[2];
x3[2] = z2[3];
count1 = 0;
count2 = 0;
for (int t1 = 0; t1 < 3; t1++)
{
count1 += x1[t1];
count2 += x2[t1];
} if (count1 != count2)
{
if (count1 > count2)
{
flag1 = true;
}
else
{
flag1 = false;
}
//如果还是于第1次那边重1样得话,交换得3个球没问题;
if (flag == flag1)
{
if (x1[0] != z3[0])
{
MessageBox.Show("第1个球有问题");
}
else
{
MessageBox.Show("第6个球有问题");
}
}
//交换得3个球里有1个问题;,3个球分别是z1[1],z1[2],z2[0]
else
{
if (z1[1] > z1[2])
{
if (flag == true)
{
MessageBox.Show("第2个球有问题");
}
else
{
MessageBox.Show("第3个球有问题");
} }
else if (z1[1] == z1[2])
{
MessageBox.Show("第5个球有问题");
}
else if (z1[1] < z1[2])
{
if (flag == true)
{
MessageBox.Show("第3个球有问题");
}
else
{
MessageBox.Show("第2个球有问题");
} } } } //拿出去得3个球有问题,分别是z1[3],z2[2],z2[3]
else
{
if (z2[2] > z2[3])
{
if (flag == true)
{ MessageBox.Show("第8个球有问题");
}
else
{
MessageBox.Show("第7个球有问题");
} }
else if (z2[2] == z2[3])
{
MessageBox.Show("第4个球有问题");
}
else if (z2[2] < z2[3])
{
if (flag == true)
{
MessageBox.Show("第7个球有问题");
}
else
{
MessageBox.Show("第8个球有问题");
}
}
} }//最后4个球有问题,是z3[0],z3[1],z3[2],z3[4]
else
{
int[] X1 = new int[2];
int[] X2 = new int[2];
X1[0] = z3[0];
X1[1] = z3[1];
X2[0] = z3[2];
X2[1] = z3[3];
count1 = 0;
count2 = 0;
count1 = z1[0] + z1[1];
count2 = X1[0] + X1[1]; if (count1 != count2)
{
if (X1[0] != z1[0])
{
MessageBox.Show("第九个球有问题"); }
else
{
MessageBox.Show("第10个球有问题");
}
}
else
{
if (X2[0] != z1[0])
{
MessageBox.Show("第11球有问题");
}
else
{
MessageBox.Show("第12球有问题");
}
}
} }
private ArrayList GetInt()
{
//假定11球重0,坏球重-1;
ArrayList array = new ArrayList(12);
for (int i = 0; i < 12; i++)
{
int[] bobs = new int[12];
for (int z = 0; z < 12; z++)
{
if (z != i)
{
bobs[z] = 0; }
else
{
bobs[z] =- 1;
} }
array.Add(bobs);
}
return array;
} }
}
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Collections;namespace _2球
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
} private void button1_Click(object sender, EventArgs e)
{
ArrayList array = GetInt();
for (int i = 0; i < 13; i++)
{
int[] bobs = (int[])array[i];
ShowMessage(bobs);
}
}
private void ShowMessage(int[] bob)
{
int[] z1 = new int[4];
int[] z2 = new int[4];
int[] z3 = new int[5];
int index;
for (int i = 0; i < 13; i++)
{
if (i < 4)
{
z1[i]=bob[i];
continue;
}
if (i < 8)
{
z2[i - 4]=bob[i];
continue;
}
if (i < 13)
{
z3[i - 8] = bob[i];
continue; }
}
ShowMess(z1, z2, z3); }
private void ShowMess(int[] z1, int[] z2, int[] z3)
{
int count1 = 0;
int count2 = 0;
int count3 = 0;
int[] x1, x2, x3;
int[] x4;
//flag用来记录那边重;count1代表左边;
bool flag,flag1;
for (int i = 0; i < 4; i++)
{
count1 += z1[i];
count2 += z2[i];
count3 += z3[i];
}
//如果count1 跟count2不等,表示坏球在这8个球里
if (count1 != count2)
{
if (count1 > count2)
{
flag = true;
}
else
{
flag = false;
}
//从z1里拿出3个球,z2里拿出2个球,z1里把2个球放到右边,z2里拿出1个球放到左边;
x1 = new int[3];
x2 = new int[3];
x3 = new int[3];
x1[0] = z1[0];
x1[1] = z2[0];
x1[2] = z3[0];
x2[0] = z1[1];
x2[1] = z1[2];
x2[2] = z2[1];
x3[0] = z1[3];
x3[1] = z2[2];
x3[2] = z2[3];
count1 = 0;
count2 = 0;
for (int t1 = 0; t1 < 3; t1++)
{
count1 += x1[t1];
count2 += x2[t1];
} if (count1 != count2)
{
if (count1 > count2)
{
flag1 = true;
}
else
{
flag1 = false;
}
//如果还是于第1次那边重1样得话,交换得3个球没问题;
if (flag == flag1)
{
if (x1[0] != z3[0])
{
MessageBox.Show("第1个球有问题");
}
else
{
MessageBox.Show("第6个球有问题");
}
}
//交换得3个球里有1个问题;,3个球分别是z1[1],z1[2],z2[0]
else
{
if (z1[1] > z1[2])
{
if (flag == true)
{
MessageBox.Show("第2个球有问题");
}
else
{
MessageBox.Show("第3个球有问题");
} }
else if (z1[1] == z1[2])
{
MessageBox.Show("第5个球有问题");
}
else if (z1[1] < z1[2])
{
if (flag == true)
{
MessageBox.Show("第3个球有问题");
}
else
{
MessageBox.Show("第2个球有问题");
} } } } //拿出去得3个球有问题,分别是z1[3],z2[2],z2[3]
else
{
if (z2[2] > z2[3])
{
if (flag == true)
{ MessageBox.Show("第8个球有问题");
}
else
{
MessageBox.Show("第7个球有问题");
} }
else if (z2[2] == z2[3])
{
MessageBox.Show("第4个球有问题");
}
else if (z2[2] < z2[3])
{
if (flag == true)
{
MessageBox.Show("第7个球有问题");
}
else
{
MessageBox.Show("第8个球有问题");
}
}
} }
else
{
int[] X1 = new int[2];
int[] X2 = new int[2];
X1[0] = z3[0];
X1[1] = z3[1];
X2[0] = z3[2];
X2[1] = z3[3];
int[] X3 = new int[2];
int[] X4 = new int[2];
count2 = X2[0] + X2[1];
count1 = X1[0] + X1[1];
if (count1 != count2)
{
if (count1 > count2)
{
flag = true;
}
else
{
flag = false;
}
//拿走X1左边1个球,拿第13个球放入,把X2得第1个球跟X1得第2个球调换换下
X3[0] = z3[4];
X3[1] = X2[0];
X4[0] = X1[1];
X4[1] = X2[1];
//如果不等表示3个球中有1个是坏的
if ((X3[0] + X3[1]) != (X4[0] + X4[1]))
{
if ((X3[0] + X3[1]) > (X4[0] + X4[1]))
{
flag1 = true;
}
else
{
flag1 = false;
}
//如果相等表示交换得球没有问题,
if (flag == flag1)
{
MessageBox.Show("第12个球有问题");
}
else
{
if (X3[1] > X4[0])
{
if (flag == true)
{
MessageBox.Show("第11个球有问题");
}
else
{
MessageBox.Show("第10个球有问题");
}
}
else
{
if (flag == true)
{
MessageBox.Show("第11个球有问题");
}
else
{
MessageBox.Show("第10个球有问题");
}
}
}
}
else
{
MessageBox.Show("第9个球有问题");
}
}
else
{
MessageBox.Show("第13个球有问题");
}
}
}
private ArrayList GetInt()
{
//假定11球重0,坏球重-1;
ArrayList array = new ArrayList(13);
for (int i = 0; i < 13; i++)
{
int[] bobs = new int[13];
for (int z = 0; z < 13; z++)
{
if (z != i)
{
bobs[z] = 0; }
else
{
bobs[z] =- 1;
} }
array.Add(bobs);
}
return array;
} }
}