人机博弈:

现有21根火柴。每次只能取走1~4根。取走最后一根火柴的人输。人先取,计算机后取。要求设计一个程序进行人机对弈,使得计算机一方为”常胜将军“。

思路分析:

(巴什博弈)具体

n根火柴,一次最多m根。
n=(m+1)*r+s;
// r = n/(m+1) , s=n%(m+1)

  • (s!=0)

  • (站在先手的角度)若想先手取完火柴,则先手第一次取s个,之后后手出k个的话,先手就取(m+1-k)根。这就是把多余的s取完,再每一回合解决掉m+1就可以了。

  • (站在后手的角度)若想后手取完火柴,不可能。

  • (s==0)

  • (站在先手的角度)若想先手取完火柴,不可能。

  • (站在后手的角度)若想后手取完火柴,先手第一次取k个,后手就取(m+1-k)根。这就是每每一回合解决掉m+1就可以了。

此题:情况特殊

要求s=21%(4+1)=1!=0,要在后手的角度上考虑先手取完,跟以上庆幸不太符合。但由于s刚好等于1,故后手可根据先手的取数,每个回合解决掉(m+1),剩余1个必由先手取完。

#include<iostream>
#include<algorithm>
using namespace std;
const int N=10;int main()
{//规则说明 printf("-----------规则说明------------\n");printf("现有21根火柴。\n每次只能取走1~4根。\n取走最后一根火柴的人输\n\n");printf("--------人机对弈现在开始-------\n");//游戏开始 for(int solo,computer,total=21;;){printf("请输入您要取的火柴数:");scanf("%d",&solo);if(total==1){printf("Sorry,you lost!");break;}total=total-5;printf("计算机取火柴%d根\n剩余火柴树:%d\n\n",5-solo,total); }
}

巴什博弈--Nim游戏相关推荐

  1. 巴什博弈小游戏(Java实现)

    界面截图: 代码: package 巴什博弈;import java.awt.*; import java.awt.event.*; import java.util.ArrayList;import ...

  2. 【小组专题二:博弈论入门综述(1)】NP状态 | SG函数 | 巴什博奕、威佐夫博弈、斐波那契博弈、Nim游戏、SJ定理

    博弈论综述[1] 前言 博弈与博弈论 博弈树 NP状态 SG函数(Sprague-Grundy) Sprague-Grundy Theorem 巴什博奕 Bash Game 威佐夫博弈 扩展威佐夫博弈 ...

  3. 【acm 博弈论 】 之 Nim游戏与sg函数

    文章目录 前言 巴什博弈 威佐夫博弈 Nim游戏 Nim游戏与sg函数 题目 题意 样例 思路 代码 前言 从今天开始复习和整理下acm的部分模块,从博弈论开始. 著名的"取石子" ...

  4. Nim游戏 —— 巴什博弈

    巴什博弈 对于这道题来说,如果我们拿到n为(3+1)*x,那么这局败,否则胜(x为大于零的整数) 解释:对于拿到(3+1)*x的一方来说,无论取1.2.3,对方都可以把控制石子数使己方拿到(3+1)* ...

  5. 关于博弈基础知识的总结:巴什博弈(Bash Game)、威佐夫博奕(Wythoff Game)、尼姆博奕(Nim Game)

    转载自http://www.aiuxian.com/article/p-942548.html 博弈论是二人或多人在平等的对局中各自利用对方的策略变换自己的对抗策略,达到取胜目标的理论. 基础的基础 ...

  6. 力扣(LeetCode)292. Nim游戏 巴什博奕

    你和你的朋友,两个人一起玩 Nim游戏:桌子上有一堆石头,每次你们轮流拿掉 1 - 3 块石头. 拿掉最后一块石头的人就是获胜者.你作为先手. 你们是聪明人,每一步都是最优解. 编写一个函数,来判断你 ...

  7. #1163 : 博弈游戏·Nim游戏(数学博弈)

    #1163 : 博弈游戏·Nim游戏 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 今天我们要认识一对新朋友,Alice与Bob. Alice与Bob总是在进行各种各样 ...

  8. hihoCoder#: 博弈游戏·Nim游戏

    [题目链接]:click here~~ [题目大意]: #1163 : 博弈游戏·Nim游戏 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 今天我们要认识一对新朋友,A ...

  9. 博弈游戏·Nim游戏·二

    题目1 : 博弈游戏·Nim游戏·二 时间限制: 10000ms 单点时限: 1000ms 内存限制: 256MB 描述 Alice和Bob这一次准备玩一个关于硬币的游戏: N枚硬币排成一列,有的正面 ...

最新文章

  1. 《程序员修炼之道》读感
  2. Web服务集成CRM的应用
  3. 如何使用firebug
  4. 导致oracle 控制文件坏,异常断电导致ORACLE控制文件等受到破坏的处理
  5. requests模块的操作 0229
  6. matlab 连通域数量,【Matlab】找到矩阵中每个连通域的最小值
  7. sphinx服务器安装及配置详解
  8. C++ 回调函数 例子
  9. 语音模块SYN6288
  10. 基于STM32MP157调试MIPI-DSI屏幕
  11. 强烈呼吁弃用Notepad++,推荐几款优秀替代品
  12. 直线回归和相关------(二)直线回归的假设测验和区间估计以及matlab实现
  13. PS做文字特效nbsp;
  14. 2018年最新Python Flask打造一个视频网站实战视频教程分享
  15. 微信小程序解决跳转时携带参数乱码的问题 ?
  16. AI云边端EasyCVR平台新功能解析:支持为角色选择多级分组
  17. Android Studio快速生成实体类插件——GsonFormat使用
  18. mysql复制多行_mysql中的复制方式总结(半同步复制,并行复制,多源复制)
  19. Android 播放自定义铃声
  20. Paypal绑定WISE美元账户提现实测

热门文章

  1. PHP socket demo
  2. 面对区块链,普通人应该做什么?
  3. ElementUI表格吸顶(sticky)
  4. png格式解析+java代码生成png图片
  5. subversion与TortoiseSVN的安装与使用
  6. idea导入项目却没有项目结构
  7. C语言输入一串数字字符串,C语言——输入一个字符串,将连续数字字符转换为数字(示例代码)...
  8. RGB888 和 RGB565
  9. 在PHP中全面阻止SQL注入式攻击之三
  10. vue 前端中如何改变图标大小