
#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根火柴,而且是轮到后行者拿),如此,先行者必胜。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)