兩個學生用n張卡玩遊戲。兩個人輪流拿卡,每人壹次至少拿1張。最多帶m卡,不要留。拿到最後壹張牌就贏了。
獲勝的最佳方式是:
輪到妳拿卡時,妳總是拿卡“剩余卡數除以(m+1)的余數”獲勝。這樣拿不到牌就輸了!
如果妳學過C語言,請看下面這個表達式。
num = rest cards %(m+1);
我給妳寫了個C程序,電腦先贏。可以參考壹下。
================================================================
/*************************************************************
*紙牌遊戲人機遊戲程序
*
* =附件:取牌遊戲規則=
*
*兩個學生用38張牌玩遊戲。
*兩人輪流取牌,每人每次至少取1張,最多取4張,不允許不取。
*拿到最後壹張牌就贏了。
*
*雷磊
*嗨@leilei.name
* qq:20739111
*/
# include & ltstdio.h & gt
#define CARDS_MAX 38 //定義卡片總數。
#define GET_MAX 4 //定義壹次取卡的最大數量。
#define MAN 1 //定義者的代碼
#定義計算機0 //定義計算機的代碼名。
char LeftCards = CARDS _ MAX//初始化本地面板
char CurrentPlayer =計算機;//為計算機操作初始化
char BestMove//最好的方法
void ChangePlayer(){
CurrentPlayer = 1 -當前播放器;//換收卡人,要麽0,要麽1。
}
//可以根據取卡數取卡的函數。
char MakeOneMove(char num){
if(num & lt;= GET_MAX) {
left cards = left cards-num;
change player();
返回1;//返回成功取卡。
}
返回0;//無法取回卡。
}
//函數讓計算機得到卡(這是關鍵)
void ComputerThink(){
字符數;
num = left cards %(GET _ MAX+1);
if(num == 0){
best move = 1;//如果拿不到最好的牌數,就拿壹張。也可以設置壹個隨機數。
}
否則{
BestMove = num
}
MakeOneMove(best move);
}
//顯示當前剩余的牌數。
char ShowCards(){
Printf ("%d張卡片\n\n ",left cards);
}
int main(){
字符數;
Printf("取卡遊戲開始:\ n ");
while(1){
ShowCards();
if(LeftCards == 0){
if(CurrentPlayer == COMPUTER){
Printf("恭喜妳,妳贏了!\ n ");
}否則{
Printf("對不起,再接再厲!\ n ");
}
打破;
}
if(CurrentPlayer == COMPUTER){
computer think();
Printf("電腦帶%d張卡\n ",best move);
}否則{
Printf("請拿卡(1-%d):",GET _ MAX);
scanf("%d ",& ampnum);
if(MakeOneMove(num)){
Printf("妳拿了%d張卡\n ",num);
}
}
}
返回0;
}