21 = 4 * 5 + 1,
所以只要每次取的总和为5根,最后一根必定是玩家取到。/*
** 问题:现在有21根火柴,两个人轮流取,
** 每人每次可以取走1至4根,不可多取,也不能不取,
** 谁取最后一根火柴谁输。请编写一个程序进行人机对弈,
** 要求人先取,计算机后取;计算机一方为“常胜将军”。
** By 小锅
** 7/4/11
*/
#include <stdio.h>
int main()
{
int StickNum = 21;
int i;
printf( "Game Start!\n" );
while( StickNum > 0 )
{
do{
printf( "How many sticks do you want to take (1 ~ %d) : ", StickNum > 4 ? 4 : StickNum );
scanf( "%d", &i );
}while( i < 1 || i > 4 || i > StickNum );
if( StickNum - i > 0 )
printf( "%d stick left in the pile.\n", StickNum - 1 );
if( StickNum - i <= 0 )
{
printf( "You have taken the last stick!\n" );
printf( "You Lose!\nGanme Over!\n" );
break;
}
else
{
printf( "Computer take %d stick(s).\n", 5 - i );
StickNum -= 5;
printf( "%d stick left in the pile.\n", StickNum );
}
}
return 0;
}
|