100根火柴,拿到最后一根火柴就赢的必胜解法及思路

问题:100根火柴,两个人轮流取,每个人每次只能取1~7根,谁拿到最后一根火柴谁赢;问有必胜策略吗,有的话是先手还是后手必胜?

最近读了刘未鹏的博文“跟波利亚学解题”有感。我也尝试使用博文中提到的一下思维方法解决这一问题。 问题并不难,只为了记录思维过程。正如欧拉认为如果不能把解决数学问题背后的思维过程教给学生的话,数学教学就是没有意义的。

解题思路(归约法):

反过来推导是一种极其重要的启发法,Pappus在他的宏篇巨著中将这种手法总结为解题的最重要手法。实际上,反向解题隐含了解题中至为深刻的思想:归约。如果原问题不容易解决,那么归约后的问题也许就容易解决了,通过一层层的归约,让逻辑的枝蔓从结论上一节节的生长,我们往往会发现,离已知量越来越近。

首先不考虑谁先抽取,如果假设Winner就是最后的赢家而Loser是输家。

第一步:从结论出发,谁拿到最后一根火柴谁赢。同时考虑约束条件每个人每次只能取1~7根。 因此Loser最后一次抽取火柴后必须剩下1-7根火柴,Winner才能成为最后的赢家。也就意味:Winner在其倒数第二次抽取完火柴后 ,剩余火柴的数量必须是8根,才能确保无论Loser在其最后一次怎么抽取火柴都要1-7根火柴留给Winner。

所以在第一步,我们将问题向上归约为:Winner必须在倒数第二次抽取完后将剩余火柴的总数量控制在8根。是不是感觉离已知条件(100根火柴)近了点

第二步,继续归约:怎样才能确保Winner在倒数第二次抽取完后将剩余火柴的总数量控制在8根? 问题转换一下就是说,在Winner在进行倒数第二次抽取时,当时的火柴是多少根时,Winner能确保完成抽取后能剩下8根火柴?答案很显然是(9-15)根。Winner抽取(9-15)根中的1-7根就一定可以保证留8根给Loser。

分析到这里,问题归约为:如何确保Loser在Winer上一轮抽取后,一定剩下9-15根火柴?离已知条件(100根火柴)又近了点。

第三步,继续归约。从第二步归约出的问题思考:Loser倒数第二次抽取火柴后必须剩下9-15根火柴。是不是似曾相识啊?和第一步思考的问题一致。答案显然是:Winner在其倒数第三次抽取火柴后剩下16根火柴给Loser。

到这里,我们将问题向上归约为:Winner必须在倒数第三次抽取完后将剩余火柴的总数量控制在16根。离已知条件(100根火柴)又近了点。

第四步,从前三步的分析,似乎找到了某种规律。 可以通过表格尝试画出来.

  Begin End
Winner 1-7 0
Loser 8 1-7
Winner 9-15 8
Loser 16 9-15
Winner 17-23 16
Loser 24 17-23
Winner 25-31 24
Loser 32 25-31
Winner 33-39 32
Loser ... ...
... ... ...
... ... ...
... ... ...
Winner 100 96

第五步,归纳一下得出结论:谁能确保抽完火柴后,剩下的火柴数量只要是8的倍数就一定是完胜。因为共100根,所以只要先下手为强抽调4根火柴就一定是最后的赢家。

推广:

考虑一个最简单的情况:100根火柴,两个人轮流取,每个人每次只能取1根,谁拿到最后一根火柴谁赢;问有必胜策略吗,有的话是先手还是后手必胜?答案显然后手必胜。同时也证实了上面的结论:谁先抽取火柴后使剩余火柴数量变为(n+1)的倍数,谁就能赢。此题中n=1.所以是后手必胜。
进一步考虑每个人每次只能取1-2根(或1-3,1-4,1-n根)的情况。都能轻易得出先手必胜的结论。

时间: 2024-10-11 09:23:37

100根火柴,拿到最后一根火柴就赢的必胜解法及思路的相关文章

嵌入式 Linux根文件系统移植(二)——根文件系统简介

嵌入式 Linux根文件系统移植(二)--根文件系统简介 根文件系统是内核启动时挂载的第一个文件系统,内核代码映像文件保存在根文件系统中,而系统引导启动程序会在根文件系统挂载之后从中把一些基本的初始化脚本和服务等加载到内存中去运行. 一.嵌入式设备文件系统 在嵌入式Linux应用中,主要的存储设备为 RAM(DRAM, SDRAM)和ROM(常采用FLASH存储器),常用的基于存储设备的文件系统类型包括:jffs2, yaffs, cramfs, romfs, ramdisk, ramfs/tm

STP根交换机,指定端口,根端口,阻塞端口

STP判断各交换机端口(指定端口:DP;根端口:RP;阻塞端口:AP) 判断步骤: 1.选举根交换机: 判断对象:所有运行STP协议的交换机中选出一个; 判断依据:交换机中选择网桥ID值(交换机优先级+MAC)最小的交换机作为网络中的根网桥; 确定根交换机后,该交换机所有端口都为指定端口DP; 2.确定非根交换机的根端口RP,每个非根交换机有且只有一个RP: 判断对象:非根网桥交换机上的不同端口之间; 判断依据: (1)端口到根网桥路径开销最小 (2)发送方网桥ID最小 (3)发送方端口ID最小

根文件系统移植(1)——根文件系统介绍

一:什么是根文件系统 (1)首先明白一点,我们的文件在硬盘上的存储并非是连续存放的,而是零散的存放在硬盘中的某些空余扇区中的,这就导致了我们很难去查看我们存放的文件(因为人无法记住所有文件存放在哪些扇区,已经扇区的顺序),这时就有了我们的文件系统,所以简单来讲,文件系统就是对一个存储设备上的数据和元数据进行组织的机制. (2)根文件系统的根: 我们知道,内核启动之后,通过调用kernel_init()得到我们的init进程,init进程通过执行一个用户态的程序linuxrc(其实也就是busyb

根文件系统移植(2)——根文件系统的两种格式

一:镜像格式的根文件系统 (1)镜像文件的根文件系统的主要作用是用来以后烧录到块设备上面的,块设备上的内核启动后去挂载它. (2)镜像形式的根文件系统是由文件夹格式的根文件系统通过特定的工具(mke2fs)制作得到的 (3)镜像文件系统具有一定的格式,格式是内化的,跟文件名后缀是无关,而是在制作时决定的. 二:文件夹格式的根文件系统 (1)简单来说,文件夹格式的根文件系统其实就是我们开发主机下的一个文件夹而已,不同之处在于这个文件夹里面包含了我们根文件系统所需的内容(包括etc目录下的运行时配置

C#中treeview的问题,如何区分根节点和子节点以及根节点和根节点的兄弟节点?

根节点的Level属性为0,一级子节点Level属性为1,二级子节点Level属性为2,以此类推:同级节点可以用索引.名称.文本来区分.用索引区分根节点时,TreeView.Nodes[0]就是第一个根节点,TreeView.Nodes[1]就是第二个根节点,以此类推:用索引区分一级子节点时,TreeView.Nodes[0].Nodes[0]为第一个根节点的第一个子节点,TreeView.Nodes[0].Nodes[1]是第一个根节点的第二个子节点,以此类推: 2.如何获取TreeView点

查看根分区大小,并取出根分区使用率赋值给root_disk变量。

[[email protected] ~]#cd / [[email protected] /]# df文件系统 1K-块 已用 可用 已用% 挂载点/dev/mapper/centos-root 17811456 8321620 9489836 47% /devtmpfs 917532 0 917532 0% /devtmpfs 933512 0 933512 0% /dev/shmtmpfs 933512 17512 916000 2% /runtmpfs 933512 0 933512 0

Craps赌博游戏、百钱白鸡、七星彩选号、抓小偷、21根火柴、10000以内完美数

Craps赌博游戏 游戏规则:同时扔两颗骰子,第一次扔出的点数数7或则11玩家胜,扔出2.3或则12庄家胜利,否则继续扔骰子. 以后只要扔出和第一次相同的点数玩家胜,扔出7庄家胜. 玩家每次进入有1000的筹码,输完游戏结束! 1 public static void gambleGame() { 2 int a = 0; 3 int money = 1000; 4 for (int j = 0;; j++) { 5 if (money > 0) { 6 System.out.println(&qu

构建最简单的根文件系统

       本文将介绍如何构建一个最简单的根文件系统,并且初步分析内核如何执行第一个内核程序.     挂接根文件系统       在挂接根文件系统之前,需要制作根文件系统.根文件系统里面需要一些基本的命令,目录和设备文件,下面来介绍如何使用busybox来制作根文件系统.       我们都知道,init进程是系统启动后执行的第一个应用程序,根据一般的Linux应用程序配置结构,一个可执行文件通常搭配一个对于的配置文件,例如samba功能对于/etc/samba/smb.conf配置文件,n

DZY的根(思维水)

DZY的根[问题描述]DZY是个没有根的人,他十分想要有根,这样才能...智商爆表的计算机大神WJC决定再帮帮他,他用程序制造了N个根——有生命的根!这N个根和WJC一样都十分机智,他们要参加国际象棋比赛,该比赛要进行K场对弈.每个根最多参加两场对弈,最少参加零场对弈.每个根都有一个与其他根都不相同的等级(用一个正整数来表示).在对弈中,等级高的根必须用黑色的棋子,等级低的根必须用白色的棋子. 每个根最多只能用一次黑色的棋子和一次白色的棋子.为了增加比赛的客观度,观众希望K场对弈中双方等级差的总