Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2538737
  • 博文数量: 308
  • 博客积分: 5547
  • 博客等级: 大校
  • 技术积分: 3782
  • 用 户 组: 普通用户
  • 注册时间: 2009-11-24 09:47
个人简介

hello world.

文章分类

全部博文(308)

分类: C/C++

2011-04-08 13:46:29

    现有21根火柴,两人轮流取,每人每次可以取走1至4根,不可多取,也不能不取,谁取最后一根火柴谁输。请编写程序进行人机对弈,要求人先取,计算机后取;计算机一方为“常胜将军”。
    我们知道,如果想让计算机剩下一根火柴,则问题转化为有20根火柴,计算机最后一次取完。经过分析,我们发现,如果计算机所取的和上一次,人所取的火柴和为5,则可以使最后留下,一根火柴,代码如下:
  1. #include <stdio.h>

  2. int main(int argc, char *argv[])
  3. {
  4.   int computer,people,spare = 21;
  5.   printf("------------------------\n");
  6.   printf("--you not win the game!\n");
  7.   printf("------------------------\n");
  8.   printf("game begin:\n");

  9.   while(1){
  10.     printf("---还有火柴 %d 根----\n",spare);
  11.     printf("people:");
  12.     scanf("%d",&people);
  13.     if(people<1 || people>4 || people>spare){
  14.       printf("你违规了,你取火柴数有问题!\n");
  15.       continue;
  16.     }
  17.     spare -= people;
  18.   
  19.     if(spare == 0){
  20.       printf("\ncomputer win! game over!\n");
  21.       break;
  22.     }
  23.     computer = 5 - people;
  24.     spare -= computer;
  25.     printf("computer: %d\n",computer);

  26.     if(spare == 0){
  27.       printf("\npeople win! game over!\n");
  28.       break;
  29.     }
  30.   }

  31.   return 0;
  32. }
程序执行结果如下:
peng@ubuntu:~/src/test/c/suanfa/miaoqu$ ./a.out 
------------------------
--you not win the game!
------------------------
game begin:
---还有火柴 21 根----
people:1
computer: 4
---还有火柴 16 根----
people:3
computer: 2
---还有火柴 11 根----
people:5
你违规了,你取火柴数有问题!
---还有火柴 11 根----
people:4
computer: 1
---还有火柴 6 根----
people:3
computer: 2
---还有火柴 1 根----
people:2
你违规了,你取火柴数有问题!
---还有火柴 1 根----
people:1

computer win! game over!

阅读(1652) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~