抢火柴游戏

这篇具有很好参考价值的文章主要介绍了抢火柴游戏。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一个游戏,规则如下:

一共30根火柴,由甲乙两依次取火柴,每次至少取一根,最多取两根,谁抢到最后一根就胜出。

设计一个机器和人玩的游戏。

策略:要抢到30,必须先抢到27,要抢到27,必须先抢到24,要抢到24 ,必须先抢到21,因此谁能拿到3的倍数谁赢。

就本题而言,谁先拿谁不利

设计:

让人选择谁先拿?

机器选择的策略是

如果剩余火柴数%3==0,随机拿1或2根

否则拿剩余火柴数%3根。

1、让人选择谁先拿?

› 从键盘输入谁先拿,如0代表计算机先拿,1代表人先拿,如果输入的是非法数字,做相应提示,并循环重输。

› 2、拿的过程是一个循环,在循环过程中,如果剩余根数为0,终止循环,并给出相应提示。

循环内部

2、如果人先拿

› 1)每次人拿时,人为输入1或2,同时要保证拿的数量要小于或等于剩余的数量,如果输入数字不合法,做相应提示,并循环重输。

› 2)每次拿时,提示用户还剩余多少根,人每拿一次(从键盘输入),火柴根数减少。

› 3)如果火柴减少到0根,那么人赢了,提示。break结束游戏。

› 4)轮到计算机拿,采用随机的方式,

所拿根数=rand( )%2 + 1

› 5)计算机每拿一次,火柴根数减少。

› 6)如果火柴减少到0根,那么计算机赢了,提示, break结束游戏。

循环内部

2、如果计算机先拿

› 1)计算机拿,采用随机的方式,所拿根数=rand( )%2 + 1

› 2)每次拿时,提示还剩余多少根,

› 3)计算机每拿一次,火柴根数减少。

› 4)如果火柴减少到0根,那么计算机赢了,提示, break结束游戏。

› 5)轮到人拿,每次人拿时,提示剩余根数多少,再人为输入1或同时要保证拿的数量要小于或等于剩余的数量,如果输入数字不合法,做相应提示,并循环重输。

› 6)人每拿一次(从键盘输入),火柴根数减少。

› 如果火柴减少到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模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 算法题的ACM模式与核心代码模式

    身为一名程序员,刷题网站系统我们应该再熟悉不过了,除了针对竞赛的 OJ 系统,比如:POJ;还有很多专为求职提供的刷题 OJ 系统,比如:leetcode、牛客网 等。 这两类 OJ 在刷题模式上有些区别,一般竞赛的 OJ 系统是针对 ACM 模式的,而求职的 OJ 系统是针对核心算法模式的

    2024年02月14日
    浏览(56)
  • 代码随想录-回溯算法(分割问题)|ACM模式

    目录 前言: 131. 分割回文串 题目描述: 输入输出描述: 思路和想法: 93. 复原 IP 地址 题目描述: 输入输出描述: 思路和想法:          回溯算法中的分割问题,是可以抽象为组合问题的,其中模拟切割线、切割问题中递归如何终止以及递归循环中如何截取子串,是我们

    2024年02月15日
    浏览(56)
  • 代码随想录-回溯算法(子集问题)|ACM模式

    目录 前言: 78. 子集 题目描述: 输入输出描述: 思路和想法: 90. 子集 II 题目描述: 输入输出描述: 思路和想法: 491. 递增子序列 题目描述: 输入输出描述: 思路和想法: 如果把 子集问题、组合问题、分割问题都抽象为一棵树的话, 那么组合问题和分割问题都是收集

    2024年02月15日
    浏览(156)
  • 最短路Dijkstra,spfa,图论二分图算法AYIT---ACM训练(模板版)

    最短路Dijkstra,spfa,图论二分图算法AYIT—ACM训练(模板版) A — Dijkstra B — spfa/Dijkstra C — 二分图 D — 二分图 E — 二分图 F — 二分图 G — Dijkstra H — Topsort Dijkstra算法基础模板题 💬 模板演示: 朴素版本Dijkstra: 💬 代码演示: 🚩 运行结果: spfa算法: 💬 代码演示: 🚩

    2024年02月10日
    浏览(49)
  • Java王者荣耀火柴人

    主要功能 键盘W,A,S,D键:控制玩家上下左右移动。按钮一:控制英雄发射一个矩形攻击红方小兵。按钮控制英雄发射魅惑技能,伤害小兵并让小兵停止移动。技能三:攻击多个敌人并让小兵停止移动。普攻:对小兵造成基础伤害。小兵每隔一段时间自动生成,在王者峡谷下路

    2024年02月05日
    浏览(45)
  • Unity大作业-第一人称射箭游戏

    视频地址:BILIBILI 代码地址:Gitee 本项目中使用了 Cross Bow 、 VegetationSpawner 、 Military Target 和 Fantacy Skybox F REE 资源包,均可在Asset Store免费下载。其中 Cross Bow 提供了弓和箭的预制, VegetationSpawner 提供了树的预制, Military Target 提供了靶子的预制, Fantacy Skybox F REE 提供了天空

    2024年02月04日
    浏览(43)
  • 3D 游戏编程与设计:第3次作业

    姓名:韩宝欣 学号:20331013 代码仓库:https://gitee.com/sse_20331013/3d-game.git 1、简答并用程序验证【建议做】 游戏对象运动的本质是什么? 本质是游戏对象在游戏每一帧的渲染过程中Transform属性在发生变化。这里物体的Transform属性是指Position与Rotation两个属性。 请用三种方法以上

    2024年02月09日
    浏览(32)
  • 【ACM算法竞赛日常训练】DAY16【奇♂妙拆分】【区区区间间间】【小AA的数列】数学 | 位运算 | 前缀和

    DAY16共3题: 奇♂妙拆分(简单数学) 区区区间间间(单调栈) 小AA的数列(位运算dp) 🎈 作者:Eriktse 🎈 简介:19岁,211计算机在读,现役ACM银牌选手🏆力争以通俗易懂的方式讲解算法!❤️欢迎关注我,一起交流C++/Python算法。(优质好文持续更新中……)🚀 🎈 阅读原

    2023年04月20日
    浏览(49)
  • pygame飞机大战小游戏(python大作业)

      python大作业,在查看了老师给的链接发现教学视频不完整,所以借用了同学的《Python编程 从入门到实践》中的一个项目,学习模仿。 二、游戏具体介绍 这是一款由辉辉亲自打造的太空对战小游戏。 游戏背景:在广袤无垠的太空里有一群蓝精灵(不是)有一群邪恶的坏人,

    2024年02月11日
    浏览(59)
  • Android平台开发技术大作业:数独游戏

    目录 《Andriod平台应用与开发技术实验》 PAGEREF _Toc24643 h 1 实验报告 PAGEREF _Toc15437 h 1 第一章引言 - 1 - 第二章调研阶段 - 2 - 2.1项目背景 - 2 - 2.2前期调研 - 2 - 2.3开发必要性 - 2 - 2.4预期功能实现 - 2 - 第三章设计阶段 - 2 - 3.1页面设计 - 2 - 3.2角色设计 - 2 - 3.3元素、定位设计 - 2

    2024年02月10日
    浏览(58)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包