原题是这样的:
[常胜将军]
现有21根火柴,两人轮流取,每人每次可以取走1至4根,不可多取,也不能不取,谁取最后一楰火柴谁输。请编写一个程序进行人机对弈,要求人先取,计算机后取;计算机一方为“常胜将军”。
*问题分析与算法设计
在计算机后走的情况下,要想使计算机成为“常胜将军”,必须找出取 关键。根据本题的要求枷以总结出,后走一方取子的数量与对方刚才一步取子的数量之和等于,就可以保证最后一个子是留给先取子的那个人的。
据此分析进行算法设计就是很简单的工作,编程实现也十分容易。
而我
以下研究的是,取火柴游戏的必胜玩法。
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
题目一
:有X根火柴,一次只能取[min,max]根(如果剩余的小于min则必须取完),2个人,轮流取,最后一个取走火柴的人算输
。已知X,min,max,判断是否存在后取者或先取者必胜的策略?如果有,策略是什么?以及,是后取者必胜还是先取者必胜?
解答:
A=min + max ,A的值保证一次取不到,2次一定能够取到,即一轮中后取的人总能通过策略保证这一轮下来2个人一共取A根火柴。
X / A = 商+余数B
(1)如果B是(0,min],可以做到后取者
必胜。后取者的做法是:假设先取者取a,后取者就取A-a即可,最终肯定是剩下B,然后先取者必须取完剩余的,从而输掉比赛。
(2)如果B==0,则做到先取者
必胜。先取者做法:先取者一开始取max根火柴,使得B=min,即可变化成情况(1),那么先取者可以做到必胜。
(3)如果min<B<min+max,则可以做到先取者
必胜。先取者做法:先取者一开始取n(n=[min,max])根火柴,使得B=(0,min]即可变化成情况(1),那么先取者可以做到必胜。
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
题目二
:有X根火柴,一次只能取[min,max]根(如果剩余的小于min则必须取完),2个人,轮流取,最后一个取走火柴的人算赢
。已知X,min,max,判断是否存在后取者或先取者必胜的策略?如果有,策略是什么?以及,是后取者必胜还是先取者必胜?
解答:
A=min + max ,A的值保证一次取不到,2次一定能够取到,即一轮中后取的人总能通过策略保证这一轮下来2个人一共取A根火柴。
X / A = 商+余数B
(1)如果B是(0,max],可以做到先取者
必胜。先取者的做法是:先取者取掉余数B,后取者就a,先取者就取A-a即可,最终肯定是由先取者来取完。
(2)如果B==0,则做到后取者
必胜。后取者做法:假设先取者取a,后取者就取A-a即可,最终肯定是后取者取完剩余的。
(3)如果max<B<min+max,则可以做到后取者
必胜。后取者做法:先取者一开始取n(n=[min,max])根火柴,那么后取者就取B-n,使得余数取完,即变化成情况(2),那么后取者按照(2)的做法可以做到必胜。
- 大小: 11.6 KB
- 大小: 11.8 KB
- 大小: 11.7 KB
- 大小: 11.5 KB
- 大小: 11.6 KB
分享到:
相关推荐
C/C++语言经典实用趣味程序设计编程百例精解 <br>C/C++语言经典实用趣味程序设计编程百例精解(1) <br>1.绘制余弦曲线 2.绘制余弦曲线和直线 3.绘制圆 4.歌星大奖赛 5.求最大数 6.高次方数...
c语言常胜将军 百度 阿里 腾讯面试题2018 c语言常胜将军 百度 阿里 腾讯面试题2018
在数学的世界里,策略和概率的游戏往往能激发学习者的热情,尤其是在中学阶段,趣味数学的问题可以成为培养逻辑思维和解决问题能力的重要工具。今天我们要探讨的,正是这样一个令人着迷的数学游戏——常胜将军。 这...
这个规律对于任何偶数个筹码都适用,因此唐是每盘游戏的常胜将军。 总结来说,通过分析游戏规则和取筹码的策略,我们得出结论:在这样的游戏中,唐是唯一能保证每盘都赢的玩家,他的胜利依赖于特定的取法组合(1, 2...
经典的C资源,很全面详细 对于初学者来说,太重要了! 第一部分 基础篇 001 第一个C程序 002 运行多个源文件 003 求整数之积 004 比较实数大小 005 字符的输出 006 显示变量所占字节数 007 ...
搬山游戏 <br>C/C++语言经典实用趣味程序设计编程百例精解(10) (详解收藏在)http://www.klfd.net.cn/?p=393 <br>91.人机猜数游戏 92.人机猜数游戏(2) 93.汉诺塔 94.兎子产子 95.将阿拉伯...
101 常胜将军 C语言源代码文件
第三部分 数值计算与趣味数学篇 075 绘制余弦曲线和直线的迭加 076 计算高次方数的尾数 077 打鱼还是晒网 078 怎样存钱以获取最大利息 079 阿姆斯特朗数 080 亲密数 081 自守数 082 具有abcd=(ab+cd)2性质的...
常胜将军 89.抢30 90.搬山游戏 <br>91.人机猜数游戏 92.人机猜数游戏(2) 93.汉诺塔 94.兎子产子 95.将阿拉伯数字转换为罗马数字 96.选美比赛 97.满足特异条件的数列 98.八...
001 第一个C程序 002 运行多个源文件 003 求整数之积 004 比较实数大小 005 字符的输出 006 显示变量所占字节数 007 自增/自减运算 008 数列求和 009 乘法口诀表 010 猜数字游戏 011 模拟ATM(自动柜员机...
计算机的策略设计应该使其成为“常胜将军”,意味着它需要有一个策略来保证无论对手如何取,都能在最后一轮剩下最后一根火柴。 6. **商人过河游戏**:这是一道逻辑问题,要求设计一个程序模拟商人和随从过河的过程...
第三部分 数值计算与趣味数学篇 075 绘制余弦曲线和直线的迭加 076 计算高次方数的尾数 077 打鱼还是晒网 078 怎样存钱以获取最大利息 079 阿姆斯特朗数 080 亲密数 081 自守数 082 具有abcd=(ab+cd)2性质的...
C语言实例解析精粹(第二版) 光盘代码 本文件包括以下内容: ※ 1、文件说明 ※ 2、源码操作说明 ※ 3、光盘目录清单 ◎ 源码操作说明 源代码使用方法是(以实例1为例): 将该实例的源码,比如实例1的1.c文件(可以...
001 第一个C程序 002 运行多个源文件 003 求整数之积 004 比较实数大小 005 字符的输出 006 显示变量所占字节数 007 自增/自减运算 008 数列求和 009 乘法口诀表 010 猜数字游戏 011 模拟ATM(自动柜员机...
C语言程序源代码(大集合).rar 实际只有139个,其余部分丢失! 第一部分 基础篇 001 第一个C程序 002 运行多个源文件 003 求整数之积 004 比较实数大小 005 字符的输出 006 显示变量所占字节数 007 自增/自...
001 第一个C程序 002 运行多个源文件 003 求整数之积 004 比较实数大小 005 字符的输出 006 显示变量所占字节数 007 自增/自减运算 008 数列求和 009 乘法口诀表 010 猜数字游戏 011 模拟ATM(自动柜员机...
【“常胜将军”的功夫观】常胜将军赵子龙,这个标题虽然提及了历史上的赵子龙,但实际内容是关于现代武术界的杰出代表刘连峻,他在武术领域的成就和他对功夫的理解。刘连峻,这位河北青县盘古武校的校长,以其卓越的...
001 第一个C程序 002 运行多个源文件 003 求整数之积 004 比较实数大小 005 字符的输出 006 显示变量所占字节数 007 自增/自减运算 008 数列求和 009 乘法口诀表 010 猜数字游戏 011 模拟ATM(自动柜员机...
C精粹(第2版)的随书关盘 ========================= ◎ 文件说明 本文件包括以下内容: ※ 1、文件说明 ※ 2、源码操作说明 ※ 3、光盘目录清单 ◎ 源码操作说明 源代码...
001 第一个C程序 002 运行多个源文件 003 求整数之积 004 比较实数大小 005 字符的输出 006 显示变量所占字节数 007 自增/自减运算 008 数列求和 009 乘法口诀表 010 猜数字游戏 011 模拟ATM(自动柜员机...