取扑克牌问题
来源:互联网 发布: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
- 取扑克牌问题
- 取石子儿和拿扑克牌问题
- 扑克牌问题
- 扑克牌问题
- 扑克牌概率问题
- 扑克牌移动问题
- 扑克牌顺子问题
- 扑克牌的顺子问题
- 扑克牌游戏问题
- Shuffle随机扑克牌问题
- 扑克牌博弈问题
- 扑克牌中的顺子问题
- 扑克牌问题之排序
- 扑克牌排列问题解法
- 洗扑克牌问题
- 随机取扑克牌中10张牌
- 扑克牌问题之比较大小
- 算法:扑克牌的顺子问题
- 虚拟现实与增强现实
- 在Github和Git上fork之简单指南
- Leetcode 161. One Edit Distance
- 分布式配置管理平台Disconf
- Win8下用DOSBox编写汇编语言
- 取扑克牌问题
- java反射
- 第5周项目1 Raptor(1)
- bash脚本入门
- 如何计算混合IO理论性能
- C++Primer Plus 第二章编程练习个人答案
- 表空间查询
- spring springmvc mybatis 开发框架搭建 + mybatis-generator dao层代码生成 + restful
- springMVC 接收List集合参数