zoukankan      html  css  js  c++  java
  • 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根)的情况。都能轻易得出先手必胜的结论。

  • 相关阅读:
    [唐胡璐]QTP框架 关键字驱动测试框架之二 框架目录管理
    [唐胡璐]测试用例设计 错误推测方法
    [唐胡璐]测试用例设计 边界值分析方法
    [唐胡璐]QTP框架 关键字驱动测试框架之三 对象库管理
    [唐胡璐]QTP框架 关键字驱动测试框架之一 框架思想
    [唐胡璐]VS技巧 C# Winform界面中的分隔线
    [唐胡璐]QTP框架 关键字驱动测试框架之四 测试用例管理
    [唐胡璐]VS技巧 两个ListBox中的项左右移动
    [唐胡璐]测试用例设计 等价类划分
    [唐胡璐]QTP技巧 利用脚本从excel导入Data Table
  • 原文地址:https://www.cnblogs.com/1zhk/p/4904562.html
Copyright © 2011-2022 走看看