我想法是分为3组 a.b.c.每组4个 第一步a 和b的比较,如果相同,肯定是C。
不然,哪个轻就在哪一组,设为x 第二步。把x组分为两组。每组两个num1,num2
再称一下。。哪个轻取哪一个,最后一步,就是在两个球之间比较。。 这个答案行不行啊??
不然,哪个轻就在哪一组,设为x 第二步。把x组分为两组。每组两个num1,num2
再称一下。。哪个轻取哪一个,最后一步,就是在两个球之间比较。。 这个答案行不行啊??
解决方案 »
- 请教一个datatable.select语句的写法
- 求一复杂xml 序列化类!
- C# solution中的reference 里的nationalinsturment.common总显示有问题
- 如何将一条语名作为参数传递给过程,并在过程中执行它?
- form应用程序中 这么让datagridview每一行点击后在这一行的下面出现一个表
- c#写的服务在XP下运行正常,但是拿到2003服务器下就启动不起来
- sqlParamter 参数非常规使用
- C# 如何调出本地连接 状态窗口?
- 最简单的数据结构问题!在线
- 求C#编码约定!
- 关于UDP接受消息问题!大家帮忙看看!!
- C#求一个数的绝对值的方法是什么?
a1,a2,a3,a4
b1,b2,b3,b4
c1,c2,c3,c4第一次:a1,a2,a3,a4======b1,b2,b3,b41:如果平衡
则,不一样的球在c1,c2,c3,c4里面从c组里面取两个球,假设是c1,c2.
第二次:c1,c2
如果平衡,则说明不一样的在c3,c4。从c3,c4中任意取一个,假设是c3,再从a组或b组中去一个,假设是a1。第三次:如果a1=c3。则c4是不一样的,如果不等,则c3是不一样的。同样,如果第二次不平衡,用同样的道理,可以称出,是c1,或者c2是不一样的。还有一种情况,假设第一次(a1,a2,a3,a4======b1,b2,b3,b4)称了以后,不平衡。
则范围在a组或b组。
这个我再想一下。
则称 9-a:b-c 再称轻的那二个就行了
2)若不等,说明8个里有一个是轻的,而9-c 是正常的球:
取轻的那端随便二个出来,比如1-4 的轻,则拿出1-2 二个,放入9-a 二个,如果再轻就称 3 和4,如果平衡就称 1 和2
int a1=1;int a2=1;int a3=1;int a4=1;
int a5=0;int a6=1;int a7=1;int a8=1;
int a9=1;int aa=1;int ab=1;int ac=1;int b=0; int c=0; int d=0; // 这三个负责三次称// 第一次称
b = (a1+a2+a3+a4) - (a5+a6+a7+a8);// 若轻球在第一组
if (b<0) {
//第二次
c = (a3+a4+a9+aa) - (a5+a6+a7+a8);
if (c==0) {
// 第三次
d = a1 - a2;
MessageBox.Show((d>0 ? "a2": "a1").ToString());
}
else {
// 第三次
d = a3 - a4;
MessageBox.Show((d>0 ? "a4": "a3").ToString());
}
}
// 若轻球在第三组
else if (b==0) {
c = (a9+aa) - (ab+ac);
if (c>0) {
d = ab - ac;
MessageBox.Show((d>0 ? "ac": "ab").ToString());
}
else {
d = a9 -aa;
MessageBox.Show((d>0 ? "a9": "aa").ToString());
}
}
// 若轻球在第三组
else {
c = (a5+a6+a9+aa) - (a1+a2+a3+a4);
if (c==0) {
d = a7 - a8;
MessageBox.Show(d>0 ? "a8": "a7");
}
else {
d = a5 - a6;
MessageBox.Show((d>0 ? "a6": "a5").ToString());
}
}
int a1=1;int a2=1;int a3=1;int a4=1;
int a5=0;int a6=1;int a7=1;int a8=1;
int a9=1;int aa=1;int ab=1;int ac=1;int b=0; int c=0; int d=0; // 这三个负责三次称// 第一次称
b = (a1+a2+a3+a4) - (a5+a6+a7+a8);// 若轻球在第一组
if (b<0) {
//第二次称(下同)
c = (a3+a4+a9+aa) - (a5+a6+a7+a8);
if (c==0) {
// 第三次称(下同)
d = a1 - a2;
MessageBox.Show(d>0 ? "a2": "a1");
}
else {
// 第三次称(下同)
d = a3 - a4;
MessageBox.Show(d>0 ? "a4": "a3");
}
}
// 若轻球在第二组
else if (b==0) {
c = (a9+aa) - (ab+ac);
if (c>0) {
d = ab - ac;
MessageBox.Show(d>0 ? "ac": "ab");
}
else {
d = a9 -aa;
MessageBox.Show(d>0 ? "a9": "aa");
}
}
// 若轻球在第三组
else {
c = (a5+a6+a9+aa) - (a1+a2+a3+a4);
if (c==0) {
d = a7 - a8;
MessageBox.Show(d>0 ? "a8": "a7");
}
else {
d = a5 - a6;
MessageBox.Show(d>0 ? "a6": "a5");
}
}
// 来人啊,夸二句先
:不是重球呢?是轻球如何做?
还有你最后一步也不对啊
上面的都没有完全解决这个问题
zhehui(小慧)的做法不就一目了然了吗?这也能考智商?
看到这题目我就想出这个方法了,不知是我想得太少还是有些人想得太多?
从第三次往前倒推
(1)如果第三次能作出判断有一个球与其它的球质量(N个)不一样,必需满足:
A. 该集合的前提有一个球的质量与其它不一样
B. 拥有一个参照对象:
a. 两个球质量一样
或
b. 有一个球不管是否有集合内, 但我们敢肯定,它可以作为一个参照
分析: 若a, 集合至多只能三个球, 但是从三个球中能一次作出判断的成功率
只有50%, 是不完全成立的(不论是否有参照对象) .
结论: 能一次作出判断的充分条件: 集合只能有两个球,拥有一个参照系 再倒推第2次的充分条件(略), 第1次的充分条件(略),与题目给定的条件比一比,能成功吗? 我的答案: 3次的成功率是50%
第一次: 左右各取3个在天平上称,
if (质量相等)
当前这6个球 --> 有坏球的集合
else
剩下的6个球 --> 有坏球的集合 结果: 排除一半
第二次: 从坏球集合和非坏球集合各取3个在天平上称 (注: 非坏球集合的
3个球做参照物)
if (质量相等)
从坏球集合取的3个球 --> 坏球的集合
else
从坏球集合剩下的3个球 --> 非坏球的集合 结果: 又排除了3个
第三次 : 从3个选取一个坏球, 成功率50%
不知道分析的是否严谨, 请大家看看.(事先假定质量不同的球是重球或轻球,或自以为是者,免了)
if (质量不相等)
当前这6个球 --> 有坏球的集合
else
剩下的6个球 --> 有坏球的集合 结果: 排除一半
第二次: 从坏球集合和非坏球集合各取3个在天平上称 (注: 非坏球集合的
3个球做参照物)
if (质量不相等)
从坏球集合取的3个球 --> 坏球的集合
else
从坏球集合剩下的3个球 --> 非坏球的集合 结果: 又排除了3个(不好意思)
10秒钟搞定? 这么厉害???? 天才???? 干什么的????
1.左右各6个得出含a的6个球;
2.在含a的6个球中任选4个,在左右各两个进行称重,如果a在其中,则取重的一边(两个球)进行第三次称重可得出结果;如果不在,则用乘余的两个行进第三次称重。
3.乘余的两个球可得出结果。
(2)5,6,7,8
(3)9,10,11,12
if(1)==(2)
{
不一样的在(3)
//不一样的在9,10,11,12
//从1-9中取3个,如1,2,3
//1,2,3vs9,10,11
//如果9,10,11是偏重的话,那么这个球就是重的
//最后从9,10,11任取两个就知道了}
else
{
不一样的在(1)(2)
123vs456
if(123==456)
{
不一样的在78,那么最后一次就看78就行了
//看下沉方向判断
}
if(123>456)
{
if(刚才(1)vs(2)时(1)>(2))
{
// 那么不一样的在123中
if(1==2)
3就是要找的球
else
看方向//如果123>456那么说明不一样的球是重的
于是可以判断出球是那一个
} else
{
//不一样的在456中
//判断的原理和123,456比较的方法一样
}}}
//刚才在上面说10秒不好意思,没有看到说球是轻还是重的
要是知道的话,用两分法就可以了