纽扣游戏---博弈(腾讯2017实习生题目)
2016-04-05 16:43
344 查看
Calvin和David正在玩取纽扣游戏,桌上一共有16个纽扣,两人轮流来取纽扣,每人每次可以选择取1个或3个或6个(不允许不取),谁取完最后的纽扣谁赢。Cavin和David都非常想赢得这个游戏,如果Cavin可以先取,Cavin的必胜策略下第一步应该取
A、1个
B、3个
C、6个
D、Cavin没有必胜策略
#include "iostream"
#include "vector"
#include "string.h"
using namespace std;
int a[100];
int x, k;
bool win[10000];
int get[10000];
int main()
{
cout << "输入纽扣总数:";
cin >> x;
cout << "输入可取纽扣数的数组大小:";
cin >> k;
cout << "输入可取纽扣数的数组:" << endl;
int i, j;
for(i=0; i<k; i++)
cin >> a[i];
win[0] = false; //面对剩下0个纽扣的局面,输
for(i=1; i<=x; i++)
{
win[i] = false;
for(j=0; j<k; j++)
{
win[i] |= (a[j]<=i && !win[i-a[j]]); //使对手面对输的局面,自己赢
if(win[i])
{
get[i] = a[j];
break;
}
}
}
if(win[x])
{
cout << "Calvin获胜" << endl;
cout << "制胜的第一步所取纽扣的个数为:" << get[x] << endl;
}
else
cout << "David获胜" << endl;
return 0;
}
具体步骤:
C–3,D–6, C–3,D–3,C–1
C–3,D–6, C–3,D–1,C–3
C–3,D–3, C–1,D–6,C–3
C–3,D–3, C–1,D–3,C–6
C–3,D–3, C–1,D–1,C–6,D–1,C–1
C–3,D–1, C–1,D–6,C–3,D–1,C–1
C–3,D–1, C–1,D–3,C–6,D–1,C–1
C–3,D–1, C–1,D–1,C–1,D–6,C–3
C–3,D–1, C–1,D–1,C–1,D–3,C–6
C–3,D–1, C–1,D–1,C–1,D–1,C–6,D–1,C–1
A、1个
B、3个
C、6个
D、Cavin没有必胜策略
#include "iostream"
#include "vector"
#include "string.h"
using namespace std;
int a[100];
int x, k;
bool win[10000];
int get[10000];
int main()
{
cout << "输入纽扣总数:";
cin >> x;
cout << "输入可取纽扣数的数组大小:";
cin >> k;
cout << "输入可取纽扣数的数组:" << endl;
int i, j;
for(i=0; i<k; i++)
cin >> a[i];
win[0] = false; //面对剩下0个纽扣的局面,输
for(i=1; i<=x; i++)
{
win[i] = false;
for(j=0; j<k; j++)
{
win[i] |= (a[j]<=i && !win[i-a[j]]); //使对手面对输的局面,自己赢
if(win[i])
{
get[i] = a[j];
break;
}
}
}
if(win[x])
{
cout << "Calvin获胜" << endl;
cout << "制胜的第一步所取纽扣的个数为:" << get[x] << endl;
}
else
cout << "David获胜" << endl;
return 0;
}
具体步骤:
C–3,D–6, C–3,D–3,C–1
C–3,D–6, C–3,D–1,C–3
C–3,D–3, C–1,D–6,C–3
C–3,D–3, C–1,D–3,C–6
C–3,D–3, C–1,D–1,C–6,D–1,C–1
C–3,D–1, C–1,D–6,C–3,D–1,C–1
C–3,D–1, C–1,D–3,C–6,D–1,C–1
C–3,D–1, C–1,D–1,C–1,D–6,C–3
C–3,D–1, C–1,D–1,C–1,D–3,C–6
C–3,D–1, C–1,D–1,C–1,D–1,C–6,D–1,C–1
相关文章推荐
- NLTK vs Sklearn vs Gensim
- 第六周书面项目2-变量的变化(1)
- CALayer的mask属性简介
- kafka安装
- Charles使用介绍--MAC上优秀的抓包工具
- java 多线程相关知识
- swift实现ios类似微信输入框跟随键盘弹出的效果
- 【转】eclipse android 设置及修改生成apk的签名文件 -- custom debug keystore
- GitHub使用方法(初级)
- HTML data属性简介以及低版本浏览器兼容算法
- SSD和HDD的区别
- zoj 3689 Digging 贪心+01背包
- 打开系统图库
- 关于JS中的apply,call,bind的深入解析
- Linux NFS服务器的安装与配置
- Windows 内置 .NET Framework 版本号
- Arcgis server 10.2 配置Oracle监听使用SQL操作ST_geometry
- 自定义view之圆点progressBar
- 如何评价 APICloud ?
- 【千里码】商品数量1,2(哈希,线段树)