练习9

来源:互联网 发布:当今网络强国 编辑:程序博客网 时间:2024/06/04 09:57
  1. /**********************************************************************************
  2. 9. 四人玩火柴棍游戏,每一次都是三个人赢,一个人输。输的人要按赢者手中的火柴
  3.   数进行赔偿,即赢者手中有多少根火柴棍,输者就赔偿多少根。现知道玩过四次后,
  4.   每人恰好输过一次, 而且每人手中都正好有16根火柴。问此四人做游戏前手中各有
  5.   多少根火柴? 编程解决此问题。
  6.    解决方法:
  7.    逆向思维:由现在每人拥有的火柴数向前倒推:
  8.    假设四个人分别是A,B,C,D; A=B=C=D=16
  9.    假设各人输的次序是A,B,C,D,则
  10.    D最后输,赔A,B,C火柴,可知A=B=C=16/2 = 8, D=40
  11.    C倒数第二输,赔A,B,D火柴,可知A=B=8/2 = 4, D = 20, C=36
  12.    依次类推..
  13.   ********************************************************************************/
  14. #include <stdio.h>
  15. void main()
  16. {
  17.     int i,j;
  18.     int nPerson[4];
  19.     //现在的数目
  20.     for(i=0; i<4; i++)
  21.     {
  22.         nPerson[i] = 16;
  23.     }
  24.     //逆推
  25.     for(i=3; i>=0; i--)
  26.     {
  27.         int pay = 0;
  28.         for(j=0; j<4; j++)
  29.         {
  30.             if(j != i)
  31.             {
  32.                 nPerson[j] = nPerson[j]/2;
  33.                 pay = pay + nPerson[j];
  34.             }
  35.         }
  36.         nPerson[i] = nPerson[i] + pay;
  37.     }
  38.     //输出原来的数目
  39.     for(i=0; i<4; i++)
  40.     {
  41.         printf("%4d", nPerson[i]);
  42.     }
  43.     printf("/n");
  44. }
 
原创粉丝点击