人机博弈——获胜的最佳策略 | Man vs Machine Game - Best Strategy for Winning
一 问题概述
现有100个球,两个人参与游戏,每人每次可以拿走1-2个球,轮流拿球,你先开始,拿走最后一个球的人获胜,你怎么拿才能必胜?
二 思路
因为拿走最后一个球的人才能获胜,故我们可以由后往前进行递推(反推法):
当还剩 1 个球时,到你开始拿球,必胜;
当还剩 2 个球时,到你开始拿球,必胜;
当还剩 3 个球时,到你开始拿球,你拿走 1-2 个球后,必输;
当还剩 4 个球时,到你开始拿球,你拿走 1 个球后,必胜;
当还剩 5 个球时,到你开始拿球,你拿走 2 个球后,必胜;
当还剩 6 个球时,到你开始拿球,你拿走 1-2 个球后,必输;
当还剩 7 个球时,到你开始拿球,你拿走 1 个球后,必胜;
当还剩 8 个球时,到你开始拿球,你拿走 1 个球后,必胜;
当还剩 9 个球时,到你开始拿球,你拿走 1-2 个球后,必输;
…
我们递推到还剩9个球时发现了规律:
**当你剩3的倍数(n % 3 == 0)个球时总是必输:3, 6, 9, …
三 最佳策略
因此,我们可以与别人取球博弈的过程中:
只要在你回合剩下的球数不是 3 的倍数(n % 3 != 0),你就是必胜的状态。
四 算法实现
这里用纯Python实现了一个也会同样策略的机器人来模拟人机博弈的过程:
1 |
|
情况如下:
因为频繁交互浪费时间,这里假定有10个球:

感谢您的支持 | Thank you for supporting
人机博弈——获胜的最佳策略 | Man vs Machine Game - Best Strategy for Winning
http://example.com/2025/05/31/obtain_the_best_strategy/