练习9
来源:互联网 发布:当今网络强国 编辑:程序博客网 时间:2024/06/04 09:57
- /**********************************************************************************
- 9. 四人玩火柴棍游戏,每一次都是三个人赢,一个人输。输的人要按赢者手中的火柴
- 数进行赔偿,即赢者手中有多少根火柴棍,输者就赔偿多少根。现知道玩过四次后,
- 每人恰好输过一次, 而且每人手中都正好有16根火柴。问此四人做游戏前手中各有
- 多少根火柴? 编程解决此问题。
- 解决方法:
- 逆向思维:由现在每人拥有的火柴数向前倒推:
- 假设四个人分别是A,B,C,D; A=B=C=D=16
- 假设各人输的次序是A,B,C,D,则
- D最后输,赔A,B,C火柴,可知A=B=C=16/2 = 8, D=40
- C倒数第二输,赔A,B,D火柴,可知A=B=8/2 = 4, D = 20, C=36
- 依次类推..
- ********************************************************************************/
- #include <stdio.h>
- void main()
- {
- int i,j;
- int nPerson[4];
- //现在的数目
- for(i=0; i<4; i++)
- {
- nPerson[i] = 16;
- }
- //逆推
- for(i=3; i>=0; i--)
- {
- int pay = 0;
- for(j=0; j<4; j++)
- {
- if(j != i)
- {
- nPerson[j] = nPerson[j]/2;
- pay = pay + nPerson[j];
- }
- }
- nPerson[i] = nPerson[i] + pay;
- }
- //输出原来的数目
- for(i=0; i<4; i++)
- {
- printf("%4d", nPerson[i]);
- }
- printf("/n");
- }