取扑克牌问题

来源:互联网 发布:windows启用网络发现 编辑:程序博客网 时间:2024/05/21 09:18

问题:54张扑克牌,两个人轮流拿牌,每人每次最少取1张牌,最多取4张,谁最后一张拿牌谁输,编写模拟计算机先拿牌且必胜的算法。

思路:首先N=1+4=5

54-1)/5=10余3

故先拿牌者取3张即可稳保胜利。

操作如下:

计算机先拿张后,执行如下原则:

玩家1张,计算机4张;

玩家2张,计算机3张;

玩家3张,计算机2张;

玩家4张,计算机1张;

就是保持每轮双方一共拿走5张牌,这样计算机最后一次取牌后扑克牌就只剩一张,玩家必输

C程序:

#include<stdio.h>

int main(){
int s=0; //记录总张数
int k; //记录一次出的牌张数
int t;       //最后为计算机出牌时,t为1,人出牌时,t为0
t=1; //首先计算机出牌,t变为1
k=3;
printf("机:%d\n",k);
s=s+k;
do{
printf("现在剩%d张\n",54-s); //提示玩家剩余张数
t=0; //玩家出牌,t变为0
printf("人:");
scanf("%d",&k);
while(k<1||k>4) //判断玩家出牌是否符合规则
{
printf("每人每次最少取1张牌,最多取4张,请重新输入\n");
t=0;
printf("人:");
scanf("%d",&k);
};
s=s+k;
t=1;
k=5-k;
printf("机:%d\n",k);
s=s+k;
}
while(s<53);
printf("现在剩%d张\n",54-s);
t=0;
printf("人:");
scanf("%d",&k);
s=s+k;
if(s==54)
printf("%d张扑克牌已取完\n",s);
if(t==0)
printf("计算机胜!");
else
printf("玩家胜!");
return 0;
}
 

1 0