江户川乱折腾
#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();elsebFinish=catchA();}else{a=a-1;bturn = false;printf("电脑拿走了1个");if(a==0)bFinish=catchB();elsebFinish=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();elsebFinish=catchB();}else{b=b-1;bturn = false;printf("电脑拿走了1个");if(b==0)bFinish=catchC();elsebFinish=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");}