规则:21根火柴,双方交替取,最少一根,最多四根。取到最后一根的人输,现在让人先取。设计程序让计算机必胜。
逻辑分析:
既然是人先取,想让人取最后一根。必须在完整的回合数内取完前面的20根,
因为规则为最少1,最多4,,所以一回合取走的火柴数量范围是2~8;
在这个范围内,电脑唯一可以控制的数量是5。
这样四个回合结束,刚好剩最后一根火柴给人。
所以如果每次人取x根,电脑就取5-x根。
#include <stdio.h>
int main()
{
int computer, people, spare = 21;
printf(" -----------------------------------------\n");
printf(" -------- 你不能战胜我,不信试试 --------\n");
printf(" -----------------------------------------\n\n");
printf("Game begin:\n\n");
while(1)
{
printf(" ---------- 目前还有火柴 %d 根 ----------\n", spare);
printf("People:");
scanf("%d", &people);
if(people<1 || people>4 || people>spare)
{
printf("你违规了,你取的火柴数有问题!\n\n");
continue;
}
spare = spare - people;
if( spare==0 )
{
printf("\nComputer win! Game Over!\n");
break;
}
computer = 5 - people;
spare = spare - computer;
printf("Computer:%d \n", computer);
if( spare==0 )
{
printf("\nPeople win! Game Over!\n");
break;
}
}
return 0;
}