送分给会数据结构的朋友

时间:2021-11-02 04:04:13
送分
有6个物体分别用1-6编号,其中5个重量相同。现在有一架台秤,1次能称出放在上
面的若干物体的总重。要求编一个程序,让计算机打出一种称法,只在称3次就可以知道
每个物体的重量。具体使用时由操作者默想6个物体各自的重量,而每次由计算机用编号提问若干物体的总重量,操作者由键盘回答。如此3次后程序应能输出每个物体的重量。

16 个解决方案

#1


3 --- 3 
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的重量怎么求,还是没有想出来。

#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]);
}

#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。

#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 不平   两次都用的


输入的条件不是很好,按编号输入然后判断好点

#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的重量怎么求,还是没有想出来。

#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]);
}

#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。

#12



   one_add_one 兄: 题目中好像是没说那个特殊的球是重了还是轻了吧?
 
   欢迎讨论!

#13




one_add_one 兄: 题目中好像是没说那个特殊的球是重了还是轻了吧?
 
   欢迎讨论!

#14



关注!

#15


12个物体,有一个不知轻重,3次也能称出来

#16



sorry! 我的解未合题意。

??????在题目中并没说有一个球与其它五个球的重量不同呀!