取牌游戏
有54张扑克牌,两个人轮流拿牌,每人每次最少取1张,最多取4张,谁拿最后一张谁输。编写模拟计算机先拿牌且必胜的算法。
分析:
为了保证计算机胜利,因此最后的牌必须是人取到,而且只能剩余1张。通过观察发现,除去最后一张牌,还剩余53张牌。
除去第一次计算机取牌,之后的每次计算机如果要赢得游戏,可以根据人取了多少张牌进行调整,以保证剩余最后一张只能给人取到。
由于人与计算机的取牌数量局限在[1,4],因此人机每次合计取牌可控制为(1+4)=5张。
因此计算机取牌为了保证胜利,N1=(54-1)%5(求余)
之后,计算机根据人出了多少牌进行调整,保证每次人机取牌总数为5。
即:
人取1张,计算机取4张
人取2张,计算机取3张
人取3张,计算机取2张
人取4张,计算机取1张
这样可以保证计算机先拿牌且必胜。
//取牌必胜算法//
#include<stdio.h>
int main(){
int total=54; //剩余牌总数
int who; //标记是人还是计算机取牌,0是计算机取,1是人取
int num; //出牌数,大于等于1且小于等4
int n0; //计算机先取牌数
int N=5; //人机调整范围
printf("******欢迎参加取牌游戏******\n");
who=0;
printf("\n标记%d\n",who);
printf