练习16

来源:互联网 发布:赵寅成 两天一夜 知乎 编辑:程序博客网 时间:2024/05/14 05:00
  1. /***********************************************************************************
  2. 16. 设有8枚硬币a,b,c,d,e,f,g,h,其中有一枚硬币是伪造的。
  3.  真伪硬币的区别仅是重量不同,可能重,可能轻。今要求以天平为工具,用最少的
  4.  比较次数挑出伪造硬币,并鉴定它是重还是轻。
  5.   方案: (1)  a,b,c VS d,e,f
  6.         (2)  a,g,h VS d,b,c
  7. ***********************************************************************************/
  8. #include <stdio.h>
  9. #include <stdlib.h>
  10. #include <time.h>
  11. enum{a=0,b,c,d,e,f,g,h};
  12. //硬币数量
  13. #define N   8
  14. //标准硬币的重量
  15. #define WEIGHT 10
  16. //保存硬币的重量
  17. int weight[N];
  18. void main()
  19. {
  20.     int i;
  21.     int LW,RW;// 天平左右边的重量
  22.     for(i=0; i<N; i++)
  23.         weight[i] = 10;
  24.     //随即选择一枚硬币,改变其重量
  25.     {
  26.         int s;
  27.         srand(time(NULL));
  28.         s = rand()%N;
  29.         weight[s] += rand()%2*2-1;
  30.     }
  31.     //-------------------------------------
  32.     //输出随机数据
  33.     for(i=0; i<N; i++)
  34.     {
  35.         printf("%3d",weight[i]);
  36.     }
  37.     printf("/n");
  38.     //-------------------------------------
  39.     LW = weight[a] + weight[b] + weight[c];
  40.     RW = weight[d] + weight[e] + weight[f];
  41.     if(LW == RW)//a,g质量不同
  42.     {
  43.         LW = weight[a];
  44.         RW = weight[g];
  45.         if(LW == RW)
  46.         {
  47.             RW = weight[h];
  48.             if(LW > RW)
  49.                 printf("h轻了/n");
  50.             else printf("h重了/n");
  51.         }
  52.         else if(LW > RW)
  53.         {
  54.             printf("g轻了/n");
  55.         }
  56.         else printf("g重了/n");
  57.     }
  58.     else if(LW > RW)
  59.     {
  60.         LW = weight[a] + weight[g] + weight[h];
  61.         RW = weight[d] + weight[b] + weight[c];
  62.         if(LW > RW)
  63.         {
  64.             LW = weight[a];
  65.             RW = weight[b];
  66.             if(LW == RW)
  67.                 printf("d轻了/n");
  68.             else if(LW > RW)
  69.                 printf("a重了/n");
  70.         }
  71.         else if(LW == RW)
  72.         {
  73.             LW = weight[e];
  74.             RW = weight[a];
  75.             if(LW == RW)
  76.                 printf("f轻了/n");
  77.             else if(LW < RW)
  78.                 printf("e轻了/n");
  79.         }
  80.         else//b,c重了
  81.         {
  82.             LW = weight[b];
  83.             RW = weight[a];
  84.             if(LW == RW)
  85.                 printf("c重了/n");
  86.             else if(LW > RW)
  87.                 printf("b重了/n");
  88.         }
  89.     }
  90.     else if(LW < RW)
  91.     {
  92.         LW = weight[a] + weight[g] + weight[h];
  93.         RW = weight[d] + weight[b] + weight[c];
  94.         if(LW > RW)//b,c轻了
  95.         {
  96.             LW = weight[a];
  97.             RW = weight[b];
  98.             if(LW == RW)
  99.                 printf("c轻了/n");
  100.             else if(LW > RW)
  101.                 printf("b轻了/n");
  102.         }
  103.         else if(LW == RW)//e,f重了
  104.         {
  105.             LW = weight[e];
  106.             RW = weight[a];
  107.             if(LW == RW)
  108.                 printf("f重了/n");
  109.             else if(LW > RW)
  110.                 printf("e重了/n");
  111.         }
  112.         else//a轻了,d重了
  113.         {
  114.             LW = weight[b];
  115.             RW = weight[a];
  116.             if(LW == RW)
  117.                 printf("d重了/n");
  118.             else if(LW > RW)
  119.                 printf("a轻了/n");
  120.         }
  121.     }
  122. }