5.14常胜将军

Q:有21根火柴,两人轮流取,每人每次可以取走1~4根,不可多取,也不能不取,谁取最后一根谁输。编写一个程序,要求人先取,计算机后取;计算机一方为常胜将军。

分析:想让计算机一方为常胜将军,也就是要让人取到最后一根火柴。这样只有一种可能,让计算机给人只留下1根火柴,因此此时人至少取1根火柴。其他情况无法保证计算机常胜。

于是问题转化成“有20根火柴,两人轮流取,每人每次可以取1~4根,不可以多取,也不能不取,要求人先取,计算机后取,谁取最后一根谁赢。”为了让计算机取到最后一根火柴,就要保证最后一轮的抽取之前剩下5根火柴。因为只有这样,无论人怎么样取火柴,计算机都能将其余的火柴全部取走。

于是问题又转换成“有15根火柴,两人轮流取,每人每次可以取1~4根,不可以多取,也不能不取,要求人先取,计算机后取,保证计算机取最后一个火柴”。

于是问他转换成“有10根火柴,两人轮流取,每人每次可以取1~4根……“

最后结论:21根火柴,人先取,计算机后取,每次取1~4根的前提下,只要保证每一轮的抽取人抽到的火彩数与计算机抽到的火柴数之和为5就可以实现计算机的常胜。

#include <iostream>
using namespace std;

int main() {
	int computer,people,spare=21;
	cout<<"GAME begins:"<<endl;

	while(1) {
		cout<<"————————目前剩余火柴数————————"<<spare<<endl;
		cout<<"people: ";
		cin>>people;
		if(people<1 || people>4 || people>spare) {
			cout<<"违规,取火柴数有问题!"<<endl;
			continue;
		}
		spare=spare-people;
		if(spare==0) {
			cout<<"Computer win!Game over!";
			break;
		}
		computer=5-people;
		spare=spare-computer;
		cout<<"computer: "<<computer<<endl;
		if(spare==0) {
			cout<<"people win!Game over!"<<endl;
			break;
		}
	}
	return 0;
}

  

时间: 2024-10-14 04:37:56

5.14常胜将军的相关文章

CentOS安装glibc-2.14

到http://ftp.gnu.org/gnu/glibc/下载glibc-2.14.tar.xz tar glibc-2.14.tar.gz cd glibc-2.14 mkdir build cd build ../configure --prefix=/usr/local/glibc-2.14 make -j4 su xxxx make install 看看现在libc.so.6在哪个位置,然后修改软链接 ln -s /usr/local/glibc-2.14/lib/libc-2.14.

14:Challenge 7(map大法好)

总时间限制:  10000ms 单个测试点时间限制:  1000ms 内存限制:  262144kB 描述 给一个长为N的数列,有M次操作,每次操作是以下两种之一: (1)修改数列中的一个数 (2)求数列中某个值出现了多少次 输入 第一行两个正整数N和M.第二行N的整数表示这个数列.接下来M行,每行开头是一个字符,若该字符为'M',则表示一个修改操作,接下来两个整数x和y,表示把x位置的值修改为y:若该字符为'Q',则表示一个询问操作,接下来一次整数x,表示求x这个值出现了多少次. 输出 对每一

14. 流、文件和IO

前言 InputStream/OutStream流用来处理设备之间的数据传输 Java.io 包几乎包含了所有操作输入.输出需要的类.所有这些流类代表了输入源和输出目标. Java.io 包中的流支持很多种格式,比如:基本类型.对象.本地化字符集等等. 一个流可以理解为一个数据的序列.输入流表示从一个源读取数据,输出流表示向一个目标写数据. 流按操作数据分为两种:字节流与字符流 按流向分为:输入流(InputStream)和输出流(OutputStream) Java 为 I/O 提供了强大的而

【Spark深入学习 -14】Spark应用经验与程序调优

----本节内容------- 1.遗留问题解答 2.Spark调优初体验 2.1 利用WebUI分析程序瓶颈 2.2 设置合适的资源 2.3 调整任务的并发度 2.4 修改存储格式 3.Spark调优经验 3.1 Spark原理及调优工具 3.2 运行环境优化 3.2.1 防止不必要的分发 3.2.2 提高数据本地性 3.2.3 存储格式选择 3.2.4 选择高配机器 3.3 优化操作符 3.3.1 过滤操作导致多小任务 3.3.2 降低单条记录开销 3.3.3 处理数据倾斜或者任务倾斜 3.

fail2ban-0.8.14 shell自动部署脚本

#!/bin/bash #fail2ban-0.8.14.tar.gz #python > 2.4V #user:root tar  -zxf fail2ban-0.8.14.tar.gz cd /root/fail2ban-0.8.14/ python setup.py install  cp /root/fail2ban-0.8.14/files/redhat-initd /etc/init.d/fail2ban chkconfig --add fail2ban sleep 1 rm -rf

Linux内核编译 Ubuntu 14.04.3 server 升级至3.19.8

读书笔记:<Linux内核设计与实现>,原书第3版,陈莉君 康华 译 第2章:从内核出发     2.3节:编译内核 实验: ============================================================ 系统环境:VM虚拟机 Ubuntu 14.04.3 LTS server版 任务:编译安装新的内核 注意:不要跨大版本,我在3.19版本内 耗时:2小时 所有版本的内核: https://www.kernel.org/pub/linux/kernel

[JS]笔记14之事件委托

-->什么是事件委托-->事件委托原理-->事件委托优点-->事件源 / 目标源 一.什么是事件委托 通俗的讲,onclick,onmouseover,onmouseout等这些就是事件 委托,就是这个事件本来应该加在某些元素上的,而你却加到其他元素上来完成这个事件. <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> &

用python实现计算1-2*((60-30+(-40/5)*(9-2*5/3+7/3*99/4*2998+10*568/14))-(-4*3)/(16-3*2))类似的公式计算

作业需求: 开发一个简单的python计算器 1.实现加减乘除及拓号优先级解析 2.用户输入 1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2) )等类似公式后,必须自己解析里面的(),+,-,*,/符号和公式(不能调用eval等类似功能偷懒实现),运算后得出结果,结果必须与真实的计算器所得出的结果一致 上图是实现的逻辑思路图,下面是对上图的分析: 整体的思想就是先匹配最

4.26日第14次作业,23章项目整体绩效评估,24-32章信息安全相关知识

一.23章:项目整体绩效评估 1.三E审计是什么的合称?(记)P524 答:三E审计是经济审计.效率审计和效果审计的合称,因为三者的第一个英文字母均为E,顾称为三E审计. 2.霍尔三维结构是从哪三个方面考察系统工程的工作过程的?P527-528 答:霍尔三维结构是霍尔(A Hall)提出的关于系统方法论的结构,它从逻辑.时间.知识三方面考察系统工程的工作过程. 3.投资回收期的公式?(记,并理解)P533答:投资回收期的公式:(累计净现金流量出现正值的年份-1) + (上年累计净现金流量值的绝对