有6个物体分别用1-6编号,其中5个重量相同。现在有一架台秤,1次能称出放在上
面的若干物体的总重。要求编一个程序,让计算机打出一种称法,只在称3次就可以知道
每个物体的重量。具体使用时由操作者默想6个物体各自的重量,而每次由计算机用编号提问若干物体的总重量,操作者由键盘回答。如此3次后程序应能输出每个物体的重量。
16 个解决方案
#1
3 --- 3
1 --- 1 *
1. 平 剩下的
2. 不平
1 --- 1 **
a 平 刚才的
b 不平 两次都用的
输入的条件不是很好,按编号输入然后判断好点
1 --- 1 *
1. 平 剩下的
2. 不平
1 --- 1 **
a 平 刚才的
b 不平 两次都用的
输入的条件不是很好,按编号输入然后判断好点
#2
对的,是编号:)
#3
2次就够了,想想看,按顺序取的话,怎么可能要3次啊,因为不同重量的只有一个,怎么放都可以有3个一个重量一样的放在一起,这样的话就可以只用2次了。哎,失败的题目。我想不同怎么楼上的还会写出算法来呢?这样的算法写出来又有什么用呢?真的很失败,对于我们可爱的中国,我已经无话可说。。。。。。。。。。。。
#4
gz
#5
老问题了,搜搜旧贴子吧!
#6
注意啊,认真看题,“台秤”,不是天平。
#7
一个不太完美的解法:
程序提问 输入
123 w1
345 w2
if(w1 == w2)
136 w3
if(w1 != w3)
12345:w1/3,6:w3-2*w1/3
else
3的重量与其它不同,这里求不出来
else
24 w3 sw1=w1/3 sw2=w2/3 sw3=w3/2
if(sw3 == sw2)
23456:sw3,1:w1-2*sw3
if(sw3 == sw1)
12346:sw3,5:w2-2*sw3
if(sw3<sw1<sw2 || sw3>sw1>sw2)
13456:sw2,2:w3-sw2
if(sw3<sw2<sw1 || sw3>sw2>sw1)
12356:sw1,4:w3-sw1
3的重量怎么求,还是没有想出来。
程序提问 输入
123 w1
345 w2
if(w1 == w2)
136 w3
if(w1 != w3)
12345:w1/3,6:w3-2*w1/3
else
3的重量与其它不同,这里求不出来
else
24 w3 sw1=w1/3 sw2=w2/3 sw3=w3/2
if(sw3 == sw2)
23456:sw3,1:w1-2*sw3
if(sw3 == sw1)
12346:sw3,5:w2-2*sw3
if(sw3<sw1<sw2 || sw3>sw1>sw2)
13456:sw2,2:w3-sw2
if(sw3<sw2<sw1 || sw3>sw2>sw1)
12356:sw1,4:w3-sw1
3的重量怎么求,还是没有想出来。
#8
我想了半天还是不会,怀疑无解中...
#9
大家想想,我要结帖了
#10
问题是有解的,用抽屉原理就能证明。。下面是程序
#include <stdio.h>
main(){
int w1,w2,w3,i;
int w[]={0,0,0,0,0,0,0};
printf("123:");
scanf("%d",&w1);
printf("345:");
scanf("%d",&w2);
printf("246:");
scanf("%d",&w3);
if(w1 == w2){
if(w1 < w3){
w[1]=w[2]=w[3]=w[4]=w[5]=w1/3;
w[6]=w3-2*w1/3;
}
else if (w1 > w3){
w[1]=w[2]=w[4]=w[5]=w[6]=w3/3;
w[3]=w2-2*w3/3;
}
}
else{
if (w2>w1 && w1==w3){
w[1]=w[2]=w[3]=w[4]=w[6]=w3/3;
w[5]=w2-2*w1/3;
}
else if (w1>w2 && w2==w3){
w[2]=w[3]=w[4]=w[5]=w[6]=w3/3;
w[1]=w1-2*w2/3;
}
else if (w1>w2){
w[1]=w[3]=w[4]=w[5]=w[6]=w2/3;
w[2]=w1-2*w2/3;
}
else if (w1<w2){
w[1]=w[2]=w[3]=w[5]=w[6]=w1/3;
w[4]=w2-2*w1/3;
}
}
for (i=1;i<=6;i++)
printf("%d:%d\n",i,w[i]);
}
#include <stdio.h>
main(){
int w1,w2,w3,i;
int w[]={0,0,0,0,0,0,0};
printf("123:");
scanf("%d",&w1);
printf("345:");
scanf("%d",&w2);
printf("246:");
scanf("%d",&w3);
if(w1 == w2){
if(w1 < w3){
w[1]=w[2]=w[3]=w[4]=w[5]=w1/3;
w[6]=w3-2*w1/3;
}
else if (w1 > w3){
w[1]=w[2]=w[4]=w[5]=w[6]=w3/3;
w[3]=w2-2*w3/3;
}
}
else{
if (w2>w1 && w1==w3){
w[1]=w[2]=w[3]=w[4]=w[6]=w3/3;
w[5]=w2-2*w1/3;
}
else if (w1>w2 && w2==w3){
w[2]=w[3]=w[4]=w[5]=w[6]=w3/3;
w[1]=w1-2*w2/3;
}
else if (w1>w2){
w[1]=w[3]=w[4]=w[5]=w[6]=w2/3;
w[2]=w1-2*w2/3;
}
else if (w1<w2){
w[1]=w[2]=w[3]=w[5]=w[6]=w1/3;
w[4]=w2-2*w1/3;
}
}
for (i=1;i<=6;i++)
printf("%d:%d\n",i,w[i]);
}
#11
描述一下我的算法:
先作个约定:(1)假设相同重量的五个球为蓝色,另外一个为红色。
(2)排除程序输入的异常(作弊)。
第一次:问编号“1,2,3,4”,得重量值为 W1 。
第二次:问编号“3,4,5,6”,得重量值为 W2 。
比较 W1 与 W2
第三次: 情况(W1==W2): 红球必在“3”或“4”中,故问“3,4”得 W3,
再解方程组:3X+Y=W1; X+Y=W3。(X:蓝球重,Y:红球重)
情况(W1!=W2): 红球必不在“3”或“4”中,故问“3”或“4”得W3,
W1 与 W2 中有且只有一个值等于 4*W3,找出不等于
4*W3 的值(假设是 W1),建立方程组:X=W3; 3X+Y=W1。
先作个约定:(1)假设相同重量的五个球为蓝色,另外一个为红色。
(2)排除程序输入的异常(作弊)。
第一次:问编号“1,2,3,4”,得重量值为 W1 。
第二次:问编号“3,4,5,6”,得重量值为 W2 。
比较 W1 与 W2
第三次: 情况(W1==W2): 红球必在“3”或“4”中,故问“3,4”得 W3,
再解方程组:3X+Y=W1; X+Y=W3。(X:蓝球重,Y:红球重)
情况(W1!=W2): 红球必不在“3”或“4”中,故问“3”或“4”得W3,
W1 与 W2 中有且只有一个值等于 4*W3,找出不等于
4*W3 的值(假设是 W1),建立方程组:X=W3; 3X+Y=W1。
#12
one_add_one 兄: 题目中好像是没说那个特殊的球是重了还是轻了吧?
欢迎讨论!
#13
one_add_one 兄: 题目中好像是没说那个特殊的球是重了还是轻了吧?
欢迎讨论!
#14
关注!
#15
12个物体,有一个不知轻重,3次也能称出来
#16
sorry! 我的解未合题意。
??????在题目中并没说有一个球与其它五个球的重量不同呀!
#1
3 --- 3
1 --- 1 *
1. 平 剩下的
2. 不平
1 --- 1 **
a 平 刚才的
b 不平 两次都用的
输入的条件不是很好,按编号输入然后判断好点
1 --- 1 *
1. 平 剩下的
2. 不平
1 --- 1 **
a 平 刚才的
b 不平 两次都用的
输入的条件不是很好,按编号输入然后判断好点
#2
对的,是编号:)
#3
2次就够了,想想看,按顺序取的话,怎么可能要3次啊,因为不同重量的只有一个,怎么放都可以有3个一个重量一样的放在一起,这样的话就可以只用2次了。哎,失败的题目。我想不同怎么楼上的还会写出算法来呢?这样的算法写出来又有什么用呢?真的很失败,对于我们可爱的中国,我已经无话可说。。。。。。。。。。。。
#4
gz
#5
老问题了,搜搜旧贴子吧!
#6
注意啊,认真看题,“台秤”,不是天平。
#7
一个不太完美的解法:
程序提问 输入
123 w1
345 w2
if(w1 == w2)
136 w3
if(w1 != w3)
12345:w1/3,6:w3-2*w1/3
else
3的重量与其它不同,这里求不出来
else
24 w3 sw1=w1/3 sw2=w2/3 sw3=w3/2
if(sw3 == sw2)
23456:sw3,1:w1-2*sw3
if(sw3 == sw1)
12346:sw3,5:w2-2*sw3
if(sw3<sw1<sw2 || sw3>sw1>sw2)
13456:sw2,2:w3-sw2
if(sw3<sw2<sw1 || sw3>sw2>sw1)
12356:sw1,4:w3-sw1
3的重量怎么求,还是没有想出来。
程序提问 输入
123 w1
345 w2
if(w1 == w2)
136 w3
if(w1 != w3)
12345:w1/3,6:w3-2*w1/3
else
3的重量与其它不同,这里求不出来
else
24 w3 sw1=w1/3 sw2=w2/3 sw3=w3/2
if(sw3 == sw2)
23456:sw3,1:w1-2*sw3
if(sw3 == sw1)
12346:sw3,5:w2-2*sw3
if(sw3<sw1<sw2 || sw3>sw1>sw2)
13456:sw2,2:w3-sw2
if(sw3<sw2<sw1 || sw3>sw2>sw1)
12356:sw1,4:w3-sw1
3的重量怎么求,还是没有想出来。
#8
我想了半天还是不会,怀疑无解中...
#9
大家想想,我要结帖了
#10
问题是有解的,用抽屉原理就能证明。。下面是程序
#include <stdio.h>
main(){
int w1,w2,w3,i;
int w[]={0,0,0,0,0,0,0};
printf("123:");
scanf("%d",&w1);
printf("345:");
scanf("%d",&w2);
printf("246:");
scanf("%d",&w3);
if(w1 == w2){
if(w1 < w3){
w[1]=w[2]=w[3]=w[4]=w[5]=w1/3;
w[6]=w3-2*w1/3;
}
else if (w1 > w3){
w[1]=w[2]=w[4]=w[5]=w[6]=w3/3;
w[3]=w2-2*w3/3;
}
}
else{
if (w2>w1 && w1==w3){
w[1]=w[2]=w[3]=w[4]=w[6]=w3/3;
w[5]=w2-2*w1/3;
}
else if (w1>w2 && w2==w3){
w[2]=w[3]=w[4]=w[5]=w[6]=w3/3;
w[1]=w1-2*w2/3;
}
else if (w1>w2){
w[1]=w[3]=w[4]=w[5]=w[6]=w2/3;
w[2]=w1-2*w2/3;
}
else if (w1<w2){
w[1]=w[2]=w[3]=w[5]=w[6]=w1/3;
w[4]=w2-2*w1/3;
}
}
for (i=1;i<=6;i++)
printf("%d:%d\n",i,w[i]);
}
#include <stdio.h>
main(){
int w1,w2,w3,i;
int w[]={0,0,0,0,0,0,0};
printf("123:");
scanf("%d",&w1);
printf("345:");
scanf("%d",&w2);
printf("246:");
scanf("%d",&w3);
if(w1 == w2){
if(w1 < w3){
w[1]=w[2]=w[3]=w[4]=w[5]=w1/3;
w[6]=w3-2*w1/3;
}
else if (w1 > w3){
w[1]=w[2]=w[4]=w[5]=w[6]=w3/3;
w[3]=w2-2*w3/3;
}
}
else{
if (w2>w1 && w1==w3){
w[1]=w[2]=w[3]=w[4]=w[6]=w3/3;
w[5]=w2-2*w1/3;
}
else if (w1>w2 && w2==w3){
w[2]=w[3]=w[4]=w[5]=w[6]=w3/3;
w[1]=w1-2*w2/3;
}
else if (w1>w2){
w[1]=w[3]=w[4]=w[5]=w[6]=w2/3;
w[2]=w1-2*w2/3;
}
else if (w1<w2){
w[1]=w[2]=w[3]=w[5]=w[6]=w1/3;
w[4]=w2-2*w1/3;
}
}
for (i=1;i<=6;i++)
printf("%d:%d\n",i,w[i]);
}
#11
描述一下我的算法:
先作个约定:(1)假设相同重量的五个球为蓝色,另外一个为红色。
(2)排除程序输入的异常(作弊)。
第一次:问编号“1,2,3,4”,得重量值为 W1 。
第二次:问编号“3,4,5,6”,得重量值为 W2 。
比较 W1 与 W2
第三次: 情况(W1==W2): 红球必在“3”或“4”中,故问“3,4”得 W3,
再解方程组:3X+Y=W1; X+Y=W3。(X:蓝球重,Y:红球重)
情况(W1!=W2): 红球必不在“3”或“4”中,故问“3”或“4”得W3,
W1 与 W2 中有且只有一个值等于 4*W3,找出不等于
4*W3 的值(假设是 W1),建立方程组:X=W3; 3X+Y=W1。
先作个约定:(1)假设相同重量的五个球为蓝色,另外一个为红色。
(2)排除程序输入的异常(作弊)。
第一次:问编号“1,2,3,4”,得重量值为 W1 。
第二次:问编号“3,4,5,6”,得重量值为 W2 。
比较 W1 与 W2
第三次: 情况(W1==W2): 红球必在“3”或“4”中,故问“3,4”得 W3,
再解方程组:3X+Y=W1; X+Y=W3。(X:蓝球重,Y:红球重)
情况(W1!=W2): 红球必不在“3”或“4”中,故问“3”或“4”得W3,
W1 与 W2 中有且只有一个值等于 4*W3,找出不等于
4*W3 的值(假设是 W1),建立方程组:X=W3; 3X+Y=W1。
#12
one_add_one 兄: 题目中好像是没说那个特殊的球是重了还是轻了吧?
欢迎讨论!
#13
one_add_one 兄: 题目中好像是没说那个特殊的球是重了还是轻了吧?
欢迎讨论!
#14
关注!
#15
12个物体,有一个不知轻重,3次也能称出来
#16
sorry! 我的解未合题意。
??????在题目中并没说有一个球与其它五个球的重量不同呀!