轮流拾取火柴问题

简介:
#include <iostream>

using namespace std;
/////////////////////////////////////////////////////////////////////////////////
//现有21根火柴,两人轮流取,每人每次可取走1-4根,不可多取,也不能不取,谁取最后//
//一根火柴则谁输。请编写一个程序进行人机对弈,要求人先取,计算机后取;计算机一 //
//方为“常胜将军”。                                                           //
/////////////////////////////////////////////////////////////////////////////////
int main()
{
	int nSticks = 21;
	int nManTaken = 0;
	int nMerchineTaken = 0;
	
	cout << ">> ----------------------- Game Begin ------------------" << endl;
	nSticks -= 1;  //the last stick must be taken by man
	while (nSticks)
	{
		cout << "How many stick do you wish to take(1~4)?";
		do 
		{  //保证输入的数是合法的
			cin >> nManTaken;
			if (nManTaken >4 || nManTaken < 1)
			{
				cout << "input 1~4 : "; 
			}
		} while (nManTaken >4 || nManTaken < 1);

		nSticks -= nManTaken;
		cout << (nSticks + 1) << " stick left in the pile." << endl;	
		
		if (nSticks >= 5)
		{			
			nMerchineTaken = 1;
		}
		else 
		{
			switch (nSticks)
			{
			case 1:
				nMerchineTaken = 1;
				break;
			case 2:
				nMerchineTaken = 2;
				break;
			case 3:
				nMerchineTaken = 3;
				break;
			case 4:
				nMerchineTaken = 4;
				break;
			}
		}
		nSticks -= nMerchineTaken;
		cout << "compute take " << nMerchineTaken << " stick." << endl;
		if (nSticks > 0)
		{
			cout << (nSticks + 1) << " stick left in the pile." << endl;	
		}
		else 
		{
			cout << " 1 stick left in the pile." << endl;
			cout << "How many stick do you wish to take(1~1)?";
			do 
			{  //保证输入的数是合法的
				cin >> nManTaken;
			} while (nManTaken != 1);

			cout << " You have taken the last stick." << endl;
			cout << " * * * You lose!" << endl;
		}										
	}
	cout << ">> ----------------------- Game Over ------------------" << endl;
	return 0;
}

目录
相关文章
|
消息中间件 安全 Dubbo
Log4j安全漏洞前车之鉴,呕心整理工作中常用开源组件避坑版本
Log4j安全漏洞前车之鉴,呕心整理工作中常用开源组件避坑版本
980 0
|
存储 SQL 关系型数据库
MySQL一张表最多能存多少数据?
MySQL一张表最多能存多少数据?
MySQL一张表最多能存多少数据?
物联网:物联网卡能不能发送短信
物联网卡(IoT SIM卡)主要用于连接物联网设备到互联网,以实现设备间的数据交换和远程控制。与传统的手机SIM卡相比,物联网卡在设计上更侧重于数据通信,如通过移动网络连接发送和接收数据。然而,关于物联网卡是否能发送短信(SMS),这主要取决于具体的物联网卡套餐和服务提供商的设定。
|
安全 网络虚拟化 网络架构
中继配置详解:网络设计的桥梁
【4月更文挑战第22天】
537 1
|
IDE 开发工具 开发者
【Python入门篇】Python开发环境的搭建——安装和配置PyCharm工具
【Python入门篇】Python开发环境的搭建——安装和配置PyCharm工具
612 0
|
存储 安全 新能源
IGBT工作原理和特性介绍
IGBT,Insulated Gate Bipolar Transistor,是由BJT(双极晶体管)和IGFET(Insulated Gate Field Effect Transistor)组成的复合全控电压驱动功率半导体器件。它兼有 MOSFET 的高输入阻抗和 GTR 的低导通压降的优点。
3012 0
IGBT工作原理和特性介绍
|
数据库连接 数据库
随笔---为什么一到选课时教务系统就卡顿甚至登不上去
随笔---为什么一到选课时教务系统就卡顿甚至登不上去
|
机器学习/深度学习 自然语言处理 Oracle
Paper之ACL&EMNLP:2009年~2019年ACL计算语言学协会年会&EMNLP自然语言处理的经验方法会议历年最佳论文简介及其解读
Paper之ACL&EMNLP:2009年~2019年ACL计算语言学协会年会&EMNLP自然语言处理的经验方法会议历年最佳论文简介及其解读
Paper之ACL&EMNLP:2009年~2019年ACL计算语言学协会年会&EMNLP自然语言处理的经验方法会议历年最佳论文简介及其解读
|
API Docker 容器
标签管理利器——使用标签编辑器,多地域多产品千台资源一次搞定
创建阿里云资源时,您可以给资源绑定标签。已经创建的资源,也可以在资源列表页面或者通过API,批量的添加、更改和删除标签。当遇到如下更为复杂问题和场景,该如何快速解决标签问题呢? 资源跨度大,需要跨资源类型、跨地域,将关联的资源打上标签。
4160 0
标签管理利器——使用标签编辑器,多地域多产品千台资源一次搞定
|
机器学习/深度学习 前端开发 安全
【云周刊】第140期:阿里人打车不给钱?内部自研神器“欢行”首次曝光
阿里人打车不给钱?内部自研神器“欢行”首次曝光,无处可藏:人脸识别时代生活报告,机器学习的入门“秘籍” ,【云吞铺子】使用访问控制,保护你的云上资产...更多精彩技术资讯,尽在云周刊!
8620 0