(c语言)轮流抽取扑克牌问题-----倒推法

问题:

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

问题分析:

要保证每轮拿牌总数在自己控制之内,所以每轮拿5张牌,对方拿N张,则自己拿5-N张,十轮可以拿50张牌,所以问题相当于,一共54-50=4张牌,自己先拿,要给对方省一张牌,所以第一次自己拿3张,以后每次都拿5-N张,其中N为对方拿牌数,1 <= n <= 4

倒退法算法思想:

由题目可知,最后一次只剩一张牌且这一张牌一定由人拿到,要保证每轮拿牌总数在自己控制之内,所以每轮拿5张牌,对方拿N张,则自己拿5-N张。当拿到的牌数可以让电脑一次性拿完的时候停止(card<=54)。这个过程可以用数组将结果存储起来,最后再逐行打印。(这里人出牌我采用了电脑随机数的方式,也可以换回sacnf()输入的方式)

代码如下:

#include<stdio.h>
#include<stdlib.h>
int main(){int a[54];int card=1;a[1]=1;int k;int i; for(i=2;card<=50;i=i+2){a[i]=5-a[i-1];//printf("人出牌的数:"); a[i+1]=1+rand()%4;card=card+5;}a[i]=54-card;int num=1;//printf("==========================================\n");int last_card=54;for(int j=i;j>=1;j=j-2){printf("电脑出牌数:%d   VS",a[j]);printf("  人出牌数:%d   ",a[j-1]);last_card=last_card-a[j]-a[j-1];printf(">>剩余的牌数是:%d\n",last_card);}printf("电脑赢了!");
}

运行结果为:

(c语言)轮流抽取扑克牌问题-----倒推法 2021-11-09相关推荐

  1. 倒推法解决“四人玩火柴棍游戏,每一次都是三个人赢,一个人输”问题

    问题:四人玩火柴棍游戏,每一次都是三个人赢,一个人输.输的人要按赢者手中的火柴数进行赔偿,即赢者手中有多少根火柴棍,输者就赔偿多少根.现知道玩过四次后,每人恰好输过一次, 而且每人手中都正好有16根火 ...

  2. 实用算法的分析与程序设计——递推法(倒推法)

    倒推法就是在不知初始值的情况下,经某种递推关系而获知问题的解或目标,再倒过来,推知它的初始条件.因为这类问题的运算过程是一一映射的,故可分析得其递推公式,然后再从这个解或目标出发,采用倒推手段,一步步 ...

  3. 迭代算法集锦(倒推法)

    求解步骤 1.确定迭代模型 2.建立迭代关系式 3.控制迭代过程 今天我们来用几个简单的例子来了解倒推法 倒推法 1.猴子吃桃 题目描述: 猴子第一天采摘了一些桃子, 第二天吃了第一天的一半多一个, ...

  4. 穿越沙漠问题(C++倒推法)

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 题目: 穿越沙漠问题. 用一辆吉普车穿越1000km的沙漠.吉普车的总装油量为500usgal,耗油率为1加仑/km.由于沙漠中没有油 ...

  5. 猴子吃桃问题(C++倒推法)

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 题目: 一只猴子摘了若干桃子,每天吃现有桃的一半多一个,到第10天时就只有一个桃子了,求原有多少个桃子? 提示:ai=(1+ai+1) ...

  6. 算法系统学习-正的麻烦反着来呗!(迭代算法-倒推法)

    倒推法 所谓的倒推法,是对某些特殊问题所采用的违反通常习惯的,从后向前推解问题的方法,正向推理比较麻烦时,反而在逆向推理中更加巧妙地解决问题. Case1猴子吃桃问题 一只小猴子摘了若干个桃子,每天吃 ...

  7. 转载:改“条件导向法”为“目标倒推法”

    http://blog.vsharing.com/chunzhixishui/A1790831.html 改"条件导向法"为"目标倒推法"(转) 做事情的时候, ...

  8. 【长期目标】用倒推法设立目标

  9. 数据结构与算法之倒推算法

    数据结构与算法之倒推算法 倒推算法概念 所谓的倒推法(Inverted Recursion)是对某些特殊问题所采用的违反通常习惯的,从后向前推解问题的方法. 在不知前提条件的情况下,经过从后向前递推, ...

最新文章

  1. ADO.NET Entity Framework 基本概述
  2. MATLAB信号包络的提取
  3. c语言模拟java面向对象_面向对象设计模式C语言实现.PDF
  4. Spring Cloud服务网关 Zuul
  5. 壁式框架内力计算_新手怎样做好框架剪力墙设计,怎样用pkpm出图
  6. 怎么用Android做一个信息管理系统,从零开始设计一个管理系统
  7. 设系统中有三种类型的资源(A,B,C)的五个进程(P1,P2,P3,P4,P5)。A资源的数量为17,B资源的数量为5,C资源的数量为20。在T0时刻系统状态如表所示。
  8. SharePoint Designer - View
  9. mysql 存储过程 锁表_MYSQL锁表问题的解决方法
  10. 问:舵机可以作为智能小车的驱动轮吗
  11. 2021最新 从零开始搭建terraria(泰拉瑞亚)云服务器
  12. 获取海拔高度. 实时气压
  13. 淡水鱼生鱼片含有大量肝吸虫 可寄生于肝脏内30年
  14. 怎样把jpg格式转换成pdf
  15. 在 VMware vSphere 中构建 Kubernetes 存储环境
  16. 开源示波器DS203介绍、原理图学习
  17. 如何使用phpdoc生成PHP文档
  18. 2021年全球零售电子商务软件收入大约6686.2百万美元,预计2028年达到12000百万美元,2022至2028期间,年复合增长率CAGR为9.4%
  19. echarts图表生成图片
  20. mrctf2020_shellcode_revenge(不用仔细分析汇编)

热门文章

  1. 牛客网之SQL非技术快速入门(6)--时间、日期
  2. Uncaught TypeError: Cannot read properties of undefined (reading ‘push‘)和Uncaught TypeError: Canno
  3. hwd分别是长宽高_长宽高都是用什么字母来表示
  4. [转]MVC整合Ajax
  5. VSCode配置Golang单元测试实例
  6. 摊牌了,请各位做好1年内随时失业的准备
  7. 安徽大学计算机学院毕业照,安徽大学毕业生的毕业照创意十足
  8. 上海市科技小巨人工程实施办法
  9. 【Python数据处理】数据降维
  10. 什么样的护眼灯最有效?南卡护眼台灯对比明基深度评测