`
atell
  • 浏览: 161676 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

[C趣味编程]常胜将军(取火柴游戏)

阅读更多

原题是这样的: [常胜将军]
现有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++语言经典实用趣味程序设计编程百例精解

    C/C++语言经典实用趣味程序设计编程百例精解 &lt;br&gt;C/C++语言经典实用趣味程序设计编程百例精解(1) &lt;br&gt;1.绘制余弦曲线 2.绘制余弦曲线和直线 3.绘制圆 4.歌星大奖赛 5.求最大数 6.高次方数...

    c语言常胜将军

    c语言常胜将军 百度 阿里 腾讯面试题2018 c语言常胜将军 百度 阿里 腾讯面试题2018

    中学趣味数学:常胜将军.docx

    在数学的世界里,策略和概率的游戏往往能激发学习者的热情,尤其是在中学阶段,趣味数学的问题可以成为培养逻辑思维和解决问题能力的重要工具。今天我们要探讨的,正是这样一个令人着迷的数学游戏——常胜将军。 这...

    中学趣味数学:常胜将军.pdf

    这个规律对于任何偶数个筹码都适用,因此唐是每盘游戏的常胜将军。 总结来说,通过分析游戏规则和取筹码的策略,我们得出结论:在这样的游戏中,唐是唯一能保证每盘都赢的玩家,他的胜利依赖于特定的取法组合(1, 2...

    200个经典C程序源码小游戏

    经典的C资源,很全面详细 对于初学者来说,太重要了! 第一部分 基础篇 001 第一个C程序 002 运行多个源文件 003 求整数之积 004 比较实数大小 005 字符的输出 006 显示变量所占字节数 007 ...

    C-C++语言趣味程序设计编程百例精解

    搬山游戏 &lt;br&gt;C/C++语言经典实用趣味程序设计编程百例精解(10) (详解收藏在)http://www.klfd.net.cn/?p=393 &lt;br&gt;91.人机猜数游戏 92.人机猜数游戏(2) 93.汉诺塔 94.兎子产子 95.将阿拉伯...

    101 常胜将军 C语言源代码文件

    101 常胜将军 C语言源代码文件

    c语言实例解析-数值趣味数学篇

    第三部分 数值计算与趣味数学篇 075 绘制余弦曲线和直线的迭加 076 计算高次方数的尾数 077 打鱼还是晒网 078 怎样存钱以获取最大利息 079 阿姆斯特朗数 080 亲密数 081 自守数 082 具有abcd=(ab+cd)2性质的...

    若干C,C++语言经典实用趣味程序设计编程精解

    常胜将军 89.抢30 90.搬山游戏 &lt;br&gt;91.人机猜数游戏 92.人机猜数游戏(2) 93.汉诺塔 94.兎子产子 95.将阿拉伯数字转换为罗马数字 96.选美比赛 97.满足特异条件的数列 98.八...

    C语言220例从易到难源代码

    001 第一个C程序 002 运行多个源文件 003 求整数之积 004 比较实数大小 005 字符的输出 006 显示变量所占字节数 007 自增/自减运算 008 数列求和 009 乘法口诀表 010 猜数字游戏 011 模拟ATM(自动柜员机...

    itatC语言程序设计决赛试题

    计算机的策略设计应该使其成为“常胜将军”,意味着它需要有一个策略来保证无论对手如何取,都能在最后一轮剩下最后一根火柴。 6. **商人过河游戏**:这是一道逻辑问题,要求设计一个程序模拟商人和随从过河的过程...

    220个C源代码 初学C语言必备

    第三部分 数值计算与趣味数学篇 075 绘制余弦曲线和直线的迭加 076 计算高次方数的尾数 077 打鱼还是晒网 078 怎样存钱以获取最大利息 079 阿姆斯特朗数 080 亲密数 081 自守数 082 具有abcd=(ab+cd)2性质的...

    C语言实例解析精粹(第二版) 光盘代码

    C语言实例解析精粹(第二版) 光盘代码 本文件包括以下内容: ※ 1、文件说明 ※ 2、源码操作说明 ※ 3、光盘目录清单 ◎ 源码操作说明 源代码使用方法是(以实例1为例): 将该实例的源码,比如实例1的1.c文件(可以...

    C语言源代码实例.rar

    001 第一个C程序 002 运行多个源文件 003 求整数之积 004 比较实数大小 005 字符的输出 006 显示变量所占字节数 007 自增/自减运算 008 数列求和 009 乘法口诀表 010 猜数字游戏 011 模拟ATM(自动柜员机...

    C语言程序源代码(大集合).rar

    C语言程序源代码(大集合).rar 实际只有139个,其余部分丢失! 第一部分 基础篇 001 第一个C程序 002 运行多个源文件 003 求整数之积 004 比较实数大小 005 字符的输出 006 显示变量所占字节数 007 自增/自...

    关于C的精粹包含至少200个C语言小程序

    001 第一个C程序 002 运行多个源文件 003 求整数之积 004 比较实数大小 005 字符的输出 006 显示变量所占字节数 007 自增/自减运算 008 数列求和 009 乘法口诀表 010 猜数字游戏 011 模拟ATM(自动柜员机...

    【“常胜将军”的功夫观】常胜将军赵子龙.docx

    【“常胜将军”的功夫观】常胜将军赵子龙,这个标题虽然提及了历史上的赵子龙,但实际内容是关于现代武术界的杰出代表刘连峻,他在武术领域的成就和他对功夫的理解。刘连峻,这位河北青县盘古武校的校长,以其卓越的...

    C语言经典源代码实例 数据结构 操作系统 图形等

    001 第一个C程序 002 运行多个源文件 003 求整数之积 004 比较实数大小 005 字符的输出 006 显示变量所占字节数 007 自增/自减运算 008 数列求和 009 乘法口诀表 010 猜数字游戏 011 模拟ATM(自动柜员机...

    C语言精粹(第2版)随书关盘

    C精粹(第2版)的随书关盘 ========================= ◎ 文件说明 本文件包括以下内容: ※ 1、文件说明 ※ 2、源码操作说明 ※ 3、光盘目录清单 ◎ 源码操作说明 源代码...

    C语言实例解析精粹

    001 第一个C程序 002 运行多个源文件 003 求整数之积 004 比较实数大小 005 字符的输出 006 显示变量所占字节数 007 自增/自减运算 008 数列求和 009 乘法口诀表 010 猜数字游戏 011 模拟ATM(自动柜员机...

Global site tag (gtag.js) - Google Analytics