取扑克牌问题

问题: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;
}
 

 

  • 8
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值