首页 > 代码库 > 巴什博弈
巴什博弈
这里有这样的一个游戏:
1、 本游戏是一个二人游戏;
2、 有一堆石子一共有n个;
3、 两人轮流进行;
4、 每走一步可以取走1…m个石子;
5、 最先取光石子的一方为胜;
如果游戏的双方使用的都是最优策略,请输出哪个人能赢。
Input 输入数据首先包含一个正整数C(C<=100),表示有C组测试数据。 每组测试数据占一行,包含两个整数n和m(1<=n,m<=1000),n和m的含义见题目描述。
Output 如果先走的人能赢,请输出“first”,否则请输出“second”,每个实例的输出占一行。
Sample Input
2
23 2
4 3
Sample Output
first
second
巴什博弈:
如果我从中取m个的话,那么面临着n=m+1的情况的话,我就必定会输;所以我令n=k*(m+1)+q,好,如果我先(第一个取的人)从中取q个,然后我接下来的每次取得数目与另一个人取得数目之和为m+1,那么另一个人就必定会输!!!
所以在进行编程的时候我们就会考虑这个条件[n%(m+1)==0],如果满足我就必定会输,否则我就必定会赢!!!
(题目所要求都是我为第一个取得人)
#include<iostream>using namespace std;int main(){ int n,m,number; cin>>number; while(number--) {cin>>n>>m; if(n<=m) { cout<<"first"<<endl; continue; } else if(n%(m+1)==0) cout<<"second"<<endl; else cout<<"first"<<endl; } return 0;}
巴什博弈
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。