| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1729 人关注过本帖
标题:【求助】八币问题,求思路!
只看楼主 加入收藏
mandown1991
Rank: 4
等 级:业余侠客
帖 子:262
专家分:252
注 册:2011-3-2
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:29 
【求助】八币问题,求思路!
这是我们的课后习题,因为到现在还学得不多,只是学到了多路if-else结构,所以一点思路都没有,所以莫怪小弟学艺不精啊!
八币问题:有八枚硬币,其中一枚是假的,它只有重量与其它几枚不同,外形无法辨认。现在有一台无砝码的天平。则如何利用这台天平,用最少的次数找出假币?
我现在思路有一点点,但是不知道用C语言如何表达,我的思路是这样的:先从这八枚硬币中拿出六个,分成两份,假设假币就是剩下的那没拿到两个中的一个,但是不知道是哪一个,那么只要从真币中随便拿一个与这两枚硬币称重比较一下,则只需两次即可找到假币。
请问各位有怎样的看法?用C语言又该如何表达?请指教!谢谢!
补充一下:不知道是不是题目出的不好,亦或是其它原因。
如果只是用if-else结构的话那就更好,因为我现在只是学了if-else结构,所以原谅我看不懂其他结构。
如果有思路而且是正确的话,那用C语言的表达应该是怎样的?

[ 本帖最后由 mandown1991 于 2011-3-3 22:49 编辑 ]
搜索更多相关主题的帖子: C语言 
2011-03-02 23:24
刘定邦
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:687
专家分:1570
注 册:2010-9-21
收藏
得分:2 
      4个       4个
2011-03-03 09:07
刘定邦
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:687
专家分:1570
注 册:2010-9-21
收藏
得分:0 
         4个                             4个
   2个            2个            2个                 2个
1个    1个   1个       1个   1个     1个       1个        1个






































2011-03-03 09:11
ansic
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:恍惚窈冥
等 级:城市猎人
帖 子:1543
专家分:5367
注 册:2011-2-15
收藏
得分:2 
我的想法,比较朴实:
先任意取2个A,B,看他俩是否相等,如果相等,就用他俩任何一个与剩下的逐一比较,不一样的就是假的。如果不等,那么剩下的全是真的, 用剩下的任何一个与A,B比较即可得出。
程序代码:
root@~ #cat coins.c
#include <stdio.h>

int main (void) {

        int array[8]={0};
        int i=0,pos;
//输入7一个样1个不一样的数标明8个硬币。
        while(i<8) {
                scanf ("%i",&array[i]);
                i++;
        }
//先取两个进行比较
        int a=array[0],b=array[1];

        if(a!=b) {
                if(a!=array[2]) {            //第三枚为真币,与之比较
                        pos=1;
                }else{
                        pos=2;
                }
                printf ("False Coin is in %i\n",pos);
        }else {
                for(i=2;i<8;i++) {           //与剩下的刘枚硬币比较
                        if(a!=array[i]) {
                                pos=i+1;
                        }
                }
                printf ("False coin is in %i\n",pos);
        }

        return 0;

}


root@~ #./coins
1 1 1 0 1 1 1 1
False coin is in 4
root@~ #./coins
0 1 1 1 1 1 1 1
False Coin is in 1
root@~ #./coins
1 1 1 1 1 1 1 0
False coin is in 8
root@~ #

[ 本帖最后由 ansic 于 2011-3-3 10:41 编辑 ]

善人者,不善人之师;不善人者,善人之资。不贵其师,不爱其资,虽智大迷。
2011-03-03 10:19
mandown1991
Rank: 4
等 级:业余侠客
帖 子:262
专家分:252
注 册:2011-3-2
收藏
得分:0 
回复 3楼 刘定邦
谢谢你的回复,可是可不可以再详细点,额,我看不懂!
2011-03-03 12:44
mandown1991
Rank: 4
等 级:业余侠客
帖 子:262
专家分:252
注 册:2011-3-2
收藏
得分:0 
回复 4楼 ansic
谢谢你的回复,我觉得你的思路不错,但是我现在还没学到数组,while语句也还没学,我还只是C语言起步,看不太懂,原谅我我学艺不精啊!

[ 本帖最后由 mandown1991 于 2011-3-3 12:56 编辑 ]
2011-03-03 12:46
huangapple
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:545
专家分:1790
注 册:2010-12-30
收藏
得分:2 
回复 6楼 mandown1991
你看他的思路不就可以了吗?要用c语言表达,这还真不好表达,思路比语法强多了

勤能补拙,熟能生巧!
2011-03-03 12:57
mandown1991
Rank: 4
等 级:业余侠客
帖 子:262
专家分:252
注 册:2011-3-2
收藏
得分:0 
回复 7楼 huangapple
嗯,是啊,他的思路不错,我试试吧!
2011-03-03 13:12
zzgzzg00
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:2
帖 子:388
专家分:627
注 册:2010-8-2
收藏
得分:2 
main()
{
int a[8],i,d,j=1;
clrscr();
for(i=0;i<8;i++)
{
printf("input the weight of number%d:",i+1);
scanf("%d",&a[i]);
}
for(i=0;i<=6;i=i+2)
{
 if(a[i]==a[i+1])
 {
  printf("time:%d No.%d&No.%d,no answear\n",j,i+1,i+2);
 }
 else
 {
  printf("time:%d No.%d&No.%d,not sure\n",j,i+1,i+2);
  d=i;
  break;
 }
j=j+1;
}
for(i=0;i<=7;i++)
{
 if(i==d)
 continue;
 else if(a[i]==a[j])
 {
  printf("time:%dNo.%d is you want",j+1,d+2);
  break;
 }
 else if(a[i]!=a[j])
 {
  printf("time:%d No.%d is you want",j+1,d+1);
  break;
 }
}
}
这样试试 这个似乎是个公务员笔试题,貌似答案是一次就能找到 但忘了怎么算了  呵呵




[ 本帖最后由 zzgzzg00 于 2011-3-3 17:01 编辑 ]

粗心是大敌
2011-03-03 15:55
广陵绝唱
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:29
帖 子:3607
专家分:1709
注 册:2008-2-15
收藏
得分:2 
这假硬币比真硬币重或者轻是关键.
2011-03-03 17:27
快速回复:【求助】八币问题,求思路!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.013761 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved