为了账号安全,请及时绑定邮箱和手机立即绑定

数据结构C++程序的实现?

数据结构C++程序的实现?

C++
一只名叫tom的猫 2019-02-14 15:11:22
数据结构C++程序的实现
查看完整描述

2 回答

?
江户川乱折腾

TA贡献1851条经验 获得超5个赞

#include<stdio.h>
#include<stdlib.h>
int a=100,b=200,c=300;
int count=0;//记录玩家拿走了几个
bool catchA();//抓取第一堆策略
bool catchB();//抓取第二堆策略
bool catchC();//第三堆
bool bturn =false; //轮到谁拿
void CheckIn(int icount)//玩家输入检测
{
printf("目前情况:a=%d,b=%d,c=%d \n",a,b,c);
printf("请输入要抓取的数量,必须小于等于%d大于0 \n",icount);
scanf("%d",&count);
if(count<=0||count>icount)
{
printf("数量不正确,必须小于等于%d大于0 \n",icount);
CheckIn(icount);//检测玩家拿走的数量符合标准否,否则递归
}
}
bool catchA()
{
if(!bturn) //如果轮到玩家,那么让玩家输入,否则进入电脑策略
{
CheckIn(a);
a=a-count;
bturn = true;
}
bool bFinish=false;//判断是否结束
if(a==0)
{
bFinish=catchB(); //a=0,那么只能拿B堆,运用B策略
}
else
{
if(a!=1)
{
printf("电脑拿走了%d个 \n",a-1); //如果a剩不只1个,那么电脑赢了,逻辑如下汉字
a=1;
printf("恭喜你,你输了,a剩一个,你只能抓这个,然后我抓了b的199个,剩下的一个只能是你的了,那么c全是我的了,哈哈 \n");
bFinish = true;
}
else
{
if(a%2!=0)//此处逻辑,因为a不只剩一个,那么我要尽量的留给玩家一个,这样儿我就赢定了,所以判断是不是偶数,如果不是,那么拿走2个,希望对手能出错。
//因为这个游戏先手比赢,所以只能看对手犯不犯错误。
{
a=a-2;
bturn = false;
printf("电脑拿走了2个");
if(a==0)
bFinish=catchB();
else
bFinish=catchA();
}
else
{
a=a-1;
bturn = false;
printf("电脑拿走了1个");
if(a==0)
bFinish=catchB();
else
bFinish=catchA();
}
}
}
return bFinish;
}
bool catchB()
{
if(!bturn)
{
CheckIn(b);
b=b-count;
bturn = true;
}
bool bFinish=false;//判断是否结束
if(b==0)
{
bFinish=catchC();
}
else
{
if(b!=1&&b!=2)
{
if(b%2!=0)
{
b=b-2;
bturn = false;
printf("电脑拿走了2个");
if(b==0)
bFinish=catchC();
else
bFinish=catchB();
}
else
{
b=b-1;
bturn = false;
printf("电脑拿走了1个");
if(b==0)
bFinish=catchC();
else
bFinish=catchB();
}
}
else
{
if(b==1)
{
b=0;
bturn = false;
printf("电脑拿走了1个");
bFinish=catchC();
}
if(b==2)
{
printf("恭喜你,你输了,b只剩2个,我拿走一个,那么你只能拿一个,C都是我的了。\n");
bFinish = true;
}
}
}
return bFinish;
}
bool catchC()
{
if(!bturn)
{
CheckIn(c);
c=c-count;
}
bool bFinish=false;//判断是否结束
if(c==0)
{
printf("哎,谁让你先手呢,我输了。\n");
bFinish = true;
}
else
{
printf("你输了,c中剩下的我全拿走啦!\n");
bFinish = true;
}
return bFinish;
}
void main()
{
bool bFinish = false;
int f=0;
printf("如果你先抓,请输入1,电脑先抓请输出2 \n");
scanf("%d",&f);
if(f==1)
{
bturn = false;
bFinish = catchA();
}
else if(f==2)//如果电脑先手,那肯定赢了。因为电脑会先拿99个那么你只能拿1个,电脑再拿199个你又只能拿一个,那么c必然是电脑最后全拿走。
{
printf("恭喜你,还没开始你就输了,我a拿走99个,你只剩一个可拿,那么我拿走b的199个,剩一个施舍被你,C都是我的了。\n");
}
else
{
printf("请选择谁先抓,输入正确的数,1表示你先抓,2表示电脑先 \n");
main();
}
system("pause");
}



查看完整回答
反对 回复 2019-03-08
  • 2 回答
  • 0 关注
  • 543 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信