• (算法)游戏必胜策略


    题目:

    1、游戏1:

    有两堆硬币,数量不定(大于0),两个人进行游戏,每个人每次可以从任意一堆取任意数量的硬币(大于0),谁拿走了最后的硬币即为胜者。

    2、游戏2:

    一个盒子,里面有一定数量(大于0)的巧克力和一根辣椒 ,两个人进行游戏,每个人每次可以从中拿出1或2或3颗巧克力,辣椒只能最后拿,谁最后拿走了辣椒就得吃掉她,也即输了。

    思路:

    先提供一下答案:

    游戏1:

    如果两堆硬币数量相等,则让对方先取,然后再自己取,取出数量多的那一堆的硬币,使得两堆硬币数量相等,依次进行。

    如果两堆硬币数量不等,则自己先取,取出数量多的那一堆的硬币,使得两堆硬币数量相等,然后再让对方取,依次进行。

    游戏2:

    如果巧克力数量为4的倍数,则让对方先取,然后再自己取,取的数量为(4-对方取的数量),依次进行。

    如果巧克力数量不是4的倍数,则让自己先取,取的数量为(巧克力数量%4),然后再让对方取,然后再自己取,取的数量为(4-对方取的数量),依次进行。

    策略归纳:

    这两个游戏有个共同点:就是要找到一个平衡点。

    如果初始状态就是平衡的,那么就由对方先来,让他打破平衡,然后自己再来维持平衡。

    如果初始状态不是平衡的,那么就由自己先来,维持平衡,然后让对方打破,接着自己再去维持平衡。

    游戏1的平衡点:两堆硬币数量相等;

    游戏2的平衡点:巧克力的数量为4的倍数;

    找到了平衡点,就可以确定游戏的优先顺序和每一步的策略,必胜者的策略就是不断地去维持平衡。

  • 相关阅读:
    python 网页cookie的使用
    python PIL 图像处理操作
    numpy linalg模块
    Robot Framework自动化测试Selenium2Library库详细用法
    Numpy 基本除法运算和模运算
    Java基础系列--基础排序算法
    java基础系列--SecurityManager入门(转)
    Java基础系列--ArrayList集合
    Java基础系列--instanceof关键字
    Java基础系列--throw、throws关键字
  • 原文地址:https://www.cnblogs.com/AndyJee/p/4947024.html
Copyright © 2020-2023  润新知