求一个博弈的C/C++代码

yw920827 2011-11-22 02:03:05
22.(取奇数游戏) 该游戏规则如下: 操作者先输入一个奇数 N(<200)表示N个石

子. 设计算机为 A 方,操作者为 B 方, 双方轮流取石子,每次取1-3个. 最后取

到石子总数为奇数的一方获胜. 编制程序使计算机有较多的获胜机会,

...全文
236 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhaopeng2511 2011-11-23
  • 打赏
  • 举报
回复
下面是我的算法,本为想使电脑必赢的,但能力有限无法实现,下面只是使电脑赢的机率提高了许多……

#include<iostream>
using namespace std;
void main()
{
int A=0,B=0,C=2; //A电脑,B人,C总数
int i,k;

while(C%2==0||C<0) //输入一个大于零的奇数
{
cout<<"请输入一个大于零的奇数:";
cin>>C;
}
while(C>0)
{
k=0;
while(k>3||k<1||k>C) //取小于等于3大于0且最的数不能比剩下的数大
{
cout<<"B:";
cin>>k;
}
C-=k;
B+=k;
cout<<"A:"<<A<<"\tB:"<<B<<"\tC:"<<C<<endl<<endl; //显示B取后结果

k=A; //保存A,后面显示A的所取数量用
if(C>=4) //A取算法,A取所剩数与4的余数(如,剩7,则A取3,剩4)
{
i=C%4;
if(i!=0)
{
A+=i;
C-=i;
}
else //剩数与4余数为0,A取1
{
A++;
C--;
}
}
else if(C<4) //C小于4,A的不同取法
{
switch(C)
{
case 1:A++;C--;break; //C剩1时取数
case 2:A+=B%2!=0?(C--,1):(C-=2,2);break; //C为2时,B为奇偶不同取法
case 3:A+=B%2!=0?(C-=2,2):(C-=3,3);break; //C为3时,B为奇偶不同取法
}
}
cout<<"A:"<<A-k<<endl; //显示A取后结果
cout<<"A:"<<A<<"\tB:"<<B<<"\tC:"<<C<<endl<<endl;
}

if(A%2==0) //判断胜负
cout<<"B 获胜!"<<endl;
else
cout<<"A 获胜!"<<endl;
}
xuyapeng1991 2011-11-23
  • 打赏
  • 举报
回复
我是新手,但我觉得如果是1个或五个的话就是先取的输,其他的应该都是另外一个输。。
zhaopeng2511 2011-11-22
  • 打赏
  • 举报
回复
谁先取……?

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧