“23”游戏是一个双人游戏,道具是23根牙签,玩家轮流取1,2或3根牙签。
拿到最后一根牙签的是输家。写程序和计算机玩“23”。总是玩家先走,
轮到计算机时,它根据以下规则采取行动:
a.如果剩余牙签多于4根,计算机就取走4-x根,x为玩家上次取走的牙签数
b.如果剩余2-4根牙签,计算机取走足够多的牙签,确保只剩下1根
c.如果剩余1根牙签,计算机只能取走它并且认输
玩家输入要取走的牙签数量时,程序应对输入的有效性进行检查。
要确定玩家输入的数在1到3之间,而且试图取走的不能超过当前剩余的。
程序如下
#include<iostream>
#include<iomanip>
using namespace std;
void game()
{
cout << "一共有23根牙签,一次只能抽1到3根玩家轮流抽1,2或3根牙签,拿到最后一根牙签的是输家。"<<endl
<< " 玩家请抽取"
<< endl;
int sum = 23; //牙签总数量
int x; //玩家抽取牙签数
while (sum>0)
{
if (sum>1)
{
cin >> x;
if (x<4 && x>1) //判断玩家输入是否符合规则
{
sum = sum - x;
cout << "你抽取了" << x << "根牙签,还剩余"
<< sum << "根牙签。" << endl;
}
else
{
cout << "你的输入有误。" << endl;
}
}
else
{
cout << "剩余一根牙签,你输了!" << endl;
break;
}
if (sum>4)
{
cout << "电脑已抽取:" << (4 - x) << endl
<<"还剩余"<< (sum = sum - (4 - x)) <<"根牙签。";
}
else if (sum>1 && sum<5)
{
cout << "电脑要抽取:" << (sum - 1) << endl;
cout<< "还剩余" << (sum=sum-(sum-1))<< "根牙签。";
}
else
{
cout << "你赢了,恭喜你!" << endl;
}
}
}
输出结果:
获胜结果:
失败结果: