数学趣题——常胜将军

一、题目

21根火柴,A和B每人每次可以取走1——4根,不可多取,也不可不取,取最后一根火柴者输,要求A先取,B后取。如何保证B永远是胜利者。

二、分析

     即必须是B最后只留给A 1根火柴。也就是除了最后第21根火柴,之前的每一轮都必须保证A和B取到的火车数之和为5。

三、源码

   1: #include <stdio.h>
   2:  
   3: int main()
   4: {
   5:     int A, B, nSpare = 21;
   6:     while (1)
   7:     {
   8:         printf("当前还有%d根火柴\n", nSpare);
   9:         printf("A:");
  10:         scanf("%d", &A);
  11:         if (A < 1 || A > 4 || A > nSpare)
  12:         {
  13:             printf("A wrong\n");
  14:             continue;
  15:         }
  16:  
  17:         nSpare -= A;
  18:         if (nSpare == 0)
  19:         {
  20:             printf("\n B win! Game over!\n");
  21:             break;
  22:         }
  23:  
  24:         B = 5 - A;
  25:         nSpare -= B;
  26:         printf("B:%d \n", B);
  27:         if (nSpare == 0)
  28:         {
  29:             printf("\n A win! Game over!\n");
  30:             break;
  31:         }
  32:     }
  33:  
  34:  
  35:     return 0;
  36: }
posted @ 2010-05-26 08:57  红脸书生  阅读(577)  评论(0编辑  收藏  举报