- /***********************************************************************************
- 16. 设有8枚硬币a,b,c,d,e,f,g,h,其中有一枚硬币是伪造的。
- 真伪硬币的区别仅是重量不同,可能重,可能轻。今要求以天平为工具,用最少的
- 比较次数挑出伪造硬币,并鉴定它是重还是轻。
- 方案: (1) a,b,c VS d,e,f
- (2) a,g,h VS d,b,c
- ***********************************************************************************/
- #include <stdio.h>
- #include <stdlib.h>
- #include <time.h>
- enum{a=0,b,c,d,e,f,g,h};
- //硬币数量
- #define N 8
- //标准硬币的重量
- #define WEIGHT 10
- //保存硬币的重量
- int weight[N];
- void main()
- {
- int i;
- int LW,RW;// 天平左右边的重量
- for(i=0; i<N; i++)
- weight[i] = 10;
- //随即选择一枚硬币,改变其重量
- {
- int s;
- srand(time(NULL));
- s = rand()%N;
- weight[s] += rand()%2*2-1;
- }
- //-------------------------------------
- //输出随机数据
- for(i=0; i<N; i++)
- {
- printf("%3d",weight[i]);
- }
- printf("/n");
- //-------------------------------------
- LW = weight[a] + weight[b] + weight[c];
- RW = weight[d] + weight[e] + weight[f];
- if(LW == RW)//a,g质量不同
- {
- LW = weight[a];
- RW = weight[g];
- if(LW == RW)
- {
- RW = weight[h];
- if(LW > RW)
- printf("h轻了/n");
- else printf("h重了/n");
- }
- else if(LW > RW)
- {
- printf("g轻了/n");
- }
- else printf("g重了/n");
- }
- else if(LW > RW)
- {
- LW = weight[a] + weight[g] + weight[h];
- RW = weight[d] + weight[b] + weight[c];
- if(LW > RW)
- {
- LW = weight[a];
- RW = weight[b];
- if(LW == RW)
- printf("d轻了/n");
- else if(LW > RW)
- printf("a重了/n");
- }
- else if(LW == RW)
- {
- LW = weight[e];
- RW = weight[a];
- if(LW == RW)
- printf("f轻了/n");
- else if(LW < RW)
- printf("e轻了/n");
- }
- else//b,c重了
- {
- LW = weight[b];
- RW = weight[a];
- if(LW == RW)
- printf("c重了/n");
- else if(LW > RW)
- printf("b重了/n");
- }
- }
- else if(LW < RW)
- {
- LW = weight[a] + weight[g] + weight[h];
- RW = weight[d] + weight[b] + weight[c];
- if(LW > RW)//b,c轻了
- {
- LW = weight[a];
- RW = weight[b];
- if(LW == RW)
- printf("c轻了/n");
- else if(LW > RW)
- printf("b轻了/n");
- }
- else if(LW == RW)//e,f重了
- {
- LW = weight[e];
- RW = weight[a];
- if(LW == RW)
- printf("f重了/n");
- else if(LW > RW)
- printf("e重了/n");
- }
- else//a轻了,d重了
- {
- LW = weight[b];
- RW = weight[a];
- if(LW == RW)
- printf("d重了/n");
- else if(LW > RW)
- printf("a轻了/n");
- }
- }
- }
练习16
最新推荐文章于 2024-07-06 20:07:06 发布