博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(算法)游戏必胜策略
阅读量:4671 次
发布时间:2019-06-09

本文共 672 字,大约阅读时间需要 2 分钟。

题目:

1、游戏1:

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

2、游戏2:

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

思路:

先提供一下答案:

游戏1:

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

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

游戏2:

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

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

 

策略归纳:

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

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

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

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

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

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

转载于:https://www.cnblogs.com/AndyJee/p/4947024.html

你可能感兴趣的文章
https soap链接示例
查看>>
八LWIP学习笔记之用户编程接口(NETCONN)
查看>>
Git Day02,工作区,暂存区,回退,删除文件
查看>>
Windows Phone 7 Coding4Fun控件简介
查看>>
Nginx 常用命令总结
查看>>
hall wrong behavior
查看>>
Markdown test
查看>>
Collection集合
查看>>
int最大值+1为什么是-2147483648最小值-1为什么是2147483647
查看>>
【C++】const在不同位置修饰指针变量
查看>>
github新项目挂历模式
查看>>
编写jquery插件
查看>>
敏捷开发笔记
查看>>
神秘海域:顶级工作室“顽皮狗”成长史(下)
查看>>
C++指针、引用知多少?
查看>>
services 系统服务的启动、停止、卸载
查看>>
Fiddler 网页采集抓包利器__手机app抓包
查看>>
Number and String
查看>>
java中的值传递和引用传递2<原文:http://blog.csdn.net/niuniu20008/article/details/2953785>...
查看>>
css实现背景图片模糊
查看>>