一个游戏,规则如下:
一共30根火柴,由甲乙两依次取火柴,每次至少取一根,最多取两根,谁抢到最后一根就胜出。
设计一个机器和人玩的游戏。
策略:要抢到30,必须先抢到27,要抢到27,必须先抢到24,要抢到24 ,必须先抢到21,因此谁能拿到3的倍数谁赢。
就本题而言,谁先拿谁不利
设计:
让人选择谁先拿?
机器选择的策略是
如果剩余火柴数%3==0,随机拿1或2根
否则拿剩余火柴数%3根。
v 1、让人选择谁先拿?
› 从键盘输入谁先拿,如0代表计算机先拿,1代表人先拿,如果输入的是非法数字,做相应提示,并循环重输。
› 2、拿的过程是一个循环,在循环过程中,如果剩余根数为0,终止循环,并给出相应提示。
循环内部
v 2、如果人先拿
› 1)每次人拿时,人为输入1或2,同时要保证拿的数量要小于或等于剩余的数量,如果输入数字不合法,做相应提示,并循环重输。
› 2)每次拿时,提示用户还剩余多少根,人每拿一次(从键盘输入),火柴根数减少。
› 3)如果火柴减少到0根,那么人赢了,提示。break结束游戏。
› 4)轮到计算机拿,采用随机的方式,
v 所拿根数=rand( )%2 + 1
› 5)计算机每拿一次,火柴根数减少。
› 6)如果火柴减少到0根,那么计算机赢了,提示, break结束游戏。
循环内部
v 2、如果计算机先拿
› 1)计算机拿,采用随机的方式,所拿根数=rand( )%2 + 1
› 2)每次拿时,提示还剩余多少根,
› 3)计算机每拿一次,火柴根数减少。
› 4)如果火柴减少到0根,那么计算机赢了,提示, break结束游戏。
› 5)轮到人拿,每次人拿时,提示剩余根数多少,再人为输入1或同时要保证拿的数量要小于或等于剩余的数量,如果输入数字不合法,做相应提示,并循环重输。
› 6)人每拿一次(从键盘输入),火柴根数减少。 文章来源:https://www.toymoban.com/news/detail-640217.html
› 如果火柴减少到0根,那么人赢了,提示。break结束游戏。 文章来源地址https://www.toymoban.com/news/detail-640217.html
#include <iostream>
#include <stdlib.h>
#include <time.h>
using namespace std;
int main()
{
int n=30;
int youtake, computertake;
int input;
srand((unsigned)time(NULL));
cout << "输入1则人先拿火柴,输入0则计算机先拿火柴,请输入你的选择:";
do {
cin >> input;
if (input != 1 && input != 0)
{
cout << "请输入1或0!" << endl;
cout << "输入1则人先拿火柴,输入0则计算机先拿火柴,请输入你的选择:";
}
} while (input != 1 && input != 0);
//选择人先拿火柴
if (input == 1)
{
while (1)
{
cout << "剩余火柴数量:" << n << endl;
cout << "本轮你要拿走多少根火柴?请输入:";
do {
cin >> youtake;
if (youtake != 1 && youtake != 2)
{
cout << "注意:每次至少取一根,最多取两根!";
cout << "本轮你要拿走多少根火柴?请输入:";
}
} while (youtake != 1 && youtake != 2);
n = n - youtake;
if (n == 0)
{
cout << endl;
cout << "恭喜你,赢得本次抢火柴游戏!"; break;
}
else if (n % 3 == 0)
{
computertake = rand() % 2 + 1;
cout << "本轮计算机拿走的火柴数量:" << computertake<<endl;
cout << endl;
}
else
{
computertake = n % 3;
cout << "本轮计算机拿走的火柴数量:" << computertake << endl;
cout << endl;
}
n = n - computertake;
if (n == 0)
{
cout << "很遗憾,你输了,本次抢火柴游戏计算机取得胜利!"; break;
}
}
}
//选择计算机先拿火柴
else
{
while (1)
{
if (n % 3 == 0)
{
computertake = rand() % 2 + 1;
cout << "本轮计算机拿走的火柴数量:" << computertake << endl;
cout << endl;
}
else
{
computertake = n % 3;
cout << "本轮计算机拿走的火柴数量:" << computertake << endl;
cout << endl;
}
n = n - computertake;
if (n == 0)
{
cout << "很遗憾,你输了,本次抢火柴游戏计算机取得胜利!"; break;
}
cout << "剩余火柴数量:" << n << endl;
cout << "本轮你要拿走多少根火柴?请输入:";
do {
cin >> youtake;
if (youtake != 1 && youtake != 2)
{
cout << "注意:每次至少取一根,最多取两根!";
cout << "本轮你要拿走多少根火柴?请输入:";
}
} while (youtake != 1 && youtake != 2);
n = n - youtake;
if (n == 0)
{
cout << endl;
cout << "恭喜你,赢得本次抢火柴游戏!"; break;
}
}
}
return 0;
}
到了这里,关于抢火柴游戏的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!