用C++做23根火柴游戏

用C++做23根火柴游戏,第1张

终于改完啦!嗯,完整版,包括函数,注释!

#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)++

}

这个主要还是算法问题, 形参count是当前剩余火柴数,返回值是本次要取走的火柴数,你自己看下

public int Get1(int count)

      {

          int[] array = new int[] { 3, 2, 1 }

       卜裂   foreach(var item in array)

          {

              if(count <= 4)

 胡晌             {

                  return count - 1

              }

              // 如果每次裤弊锋取item根火柴,取了奇数次后剩余1,则赢,如果最后一次火柴数小于item,则按一次来算

              if(Math.Ceiling(((decimal)count - 1) / item) % 2 == 1)

              {

                  return item

              }

          }

          // 输了,取1根

          return 1

      }

程序没有扮并,给你算法。

首先拿的人拿2根,然后不管后行者拿几厅蔽迹根,先者拿的根数都跟后者拿的凑成4根(如此5次以后,并余就剩下23 - (2+4*5)= 1根火柴,而且是轮到后行者拿),如此,先行者必胜。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/12527790.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2025-08-26
下一篇2025-08-26

发表评论

登录后才能评论

评论列表(0条)

    保存