2 yueyueyue8 yueyueyue8 于 2016.09.07 14:36 提问

23根火柴游戏的c++编程

两个玩家各自拥有二十三根火柴,每个游戏者轮流走一根,两根,或者三根火柴,拿到最后一根火柴的就算输了,编一个程序跟计算机玩这个游戏。

5个回答

qq_29594393
qq_29594393   Ds   Rxr 2016.09.07 15:04

问题太简单了,拿走的火柴必须是一二 三中的一种情况,只需要保持你拿完后剩下的是4的倍数加1就赢定了,接下来,计算机拿n根,你就取4-n,最后一根一定是计算机拿,

xiao_quande
xiao_quande   2016.09.07 15:40

年轻人好好想想,动动脑筋,很快就能写出来了

xianfajushi
xianfajushi   2016.09.07 16:44

各自23根火柴各自抽?

qq_34745295
qq_34745295   2016.09.07 19:34

不要笑,我只是条小咸鱼,-)图片

lx624909677
lx624909677   Ds   Rxr 2016.09.20 16:36
 #include<iostream>
#include<string>
#define NUM 20
using namespace std;

void main()
{
 //规则的输出
 cout<<endl;
 cout<<"***************************************************"<<endl;
 cout<<"游戏规则:共有23根火柴,2个人依次拿取,每个人每次只"<<endl;
 cout<<"能拿1跟或者2跟或者3跟火柴。拿到最后一跟火柴的人算输"<<endl;
 cout<<"****************************************************"<<endl;
 cout<<endl; 
 //变量的定义
 int  match_num=23;     //火柴数目
 int  *p_match_num;     //指向火柴数目的指针
 int  player = 0;     //玩家变量,偶数代表玩家1,奇数代表玩家2
 char player_first[NUM];    //玩家1的名字
 char player_second[NUM];   //玩家2的名字
 char judge;       //判断变量,值为'y'时,表示玩家1先开局
 int  put_num=0;      //拿走火柴的数目
 char temp[NUM];
 char *p_player_now;
 int *p_put_num;      //指向拿走火柴数目的指针
 int *p_player;
 //指针赋值
 p_match_num=&match_num;
 p_put_num=&put_num;
 p_player=&player;
 p_player_now=player_first;
 //函数的定义
 void match(int* p_player, int* p_match_num,int* p_put_num,char* p_player_now);     //火柴拿走数目函数
 //游戏开始
 cout<<"请输入玩家1的名字:";
 gets(player_first);
 cout<<"请输入玩家2的名字:";
 gets(player_second);
 //玩家开局顺序的选择
 cout<<"玩家“"<<player_first<<"”选择拿火柴顺序(“F(First)/S(Second)”)";
 cin>>judge;
 if(judge=='s')
 {
  strcpy(temp,player_first);
  strcpy(player_first,player_second);
  strcpy(player_second,temp);
 }
 cout<<"玩家“"<<player_first<<"”先开始"<<endl;
 cout<<endl;
 //火柴的拿取
 while(1)
 {
  if(player%2==0)
   p_player_now=player_first;
  else
   p_player_now=player_second;
  match(p_player,p_match_num,p_put_num,p_player_now);
  match_num=match_num-put_num;
  if(match_num==0)
  {
   cout<<"玩家“"<<p_player_now<<"”您输了!"<<endl;
   break;
  }
 }
}

void match(int* p_player,int* p_match_num,int* p_put_num,char* p_player_now)
{
 cout<<"请“"<<p_player_now<<"”输入准备拿走火柴的数目:";
 cin>>*p_put_num;
 while(*p_put_num!=1 && *p_put_num!=2 && *p_put_num!=3 || *p_match_num-*p_put_num<0)
 {
  if(*p_put_num!=1 && *p_put_num!=2 && *p_put_num!=3)
  {
   cout<<"您输入的数值不合法,拿走的火柴数目只能是 1 或 2 或 3,请重新输入:";
   cin>>*p_put_num;
  }
  if(*p_match_num-*p_put_num<0)
  {
   cout<<"您输入的数值大于剩余火柴数目,请重新输入:";
   cin>>*p_put_num;
  } 
 }
 cout<<"您拿走的火柴数目是: "<<*p_put_num<<endl;
 cout<<"剩余火柴数目是: "<<*p_match_num-*p_put_num<<endl;
 cout<<endl;
 (*p_player)++;
}
Csdn user default icon
上传中...
上传图片
插入图片