您的位置:首页 > 其它

纽扣游戏---博弈

2016-04-04 13:46 330 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: