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");
}
- 2 回答
- 0 關注
- 590 瀏覽
添加回答
舉報
