策略大师:小I与小W的数字猜谜挑战 | 豆包MarsCode AI 刷题

241 阅读3分钟

问题描述

在一个数字游戏中,数字 1 到 n 中有一个是幸运数字,且这个数字是等概率随机选择的。玩家 小I 和 小W 轮流从这些数字中猜测幸运数字,小I 总是先开始猜。

游戏规则如下:每轮游戏后,主持人会宣布猜测结果是太大了、太小了,还是正确的。如果猜中,那么该轮猜测者即为游戏的获胜者。

假设 小I 和 小W 都采取最优策略,并且都知道对方也是如此,本题要求计算 小I 获胜的概率。请输出保留五位小数的结果。


测试样例

样例1:

输入:n = 2
输出:'0.50000'

样例2:

输入:n = 3
输出:'0.66667'

样例3:

输入:n = 4
输出:'0.50000'

样例4:

输入:n = 5
输出:'0.60000'

样例5:

输入:n = 10
输出:'0.50000'

分析

首先,我们需要明确的是,小I和小W都采取最优策略。这意味着他们会尽量最大化自己的获胜概率。

基本思路

  1. 边界情况

    • 当 n = 1 时,幸运数字只能是 1,小I必然获胜,获胜概率为 1。
  2. 一般情况

    • 当 n > 1 时,小I和小W的策略变得更加复杂。小I的首轮猜测至关重要,因为他的猜测会影响后续的轮次。

最优策略分析

在最优策略下,小I和小W会采取“分而治之”的策略。具体来说:

  • 小I在第一轮会猜测一个数字 k,这个 k 会将剩余的数字分成两部分:一部分比 k 小,另一部分比 k 大。小I会选择一个 k,使得无论幸运数字在哪一部分,他的获胜概率都是最高的。
  • 小W在小I之后猜测,他也会采取类似的策略。

数学推导

假设小I的选择是 k,那么他获胜的概率可以表示为:

  • 如果幸运数字在 1 到 k-1 之间,小W会继续猜测,小I的获胜概率取决于下一轮的情况。
  • 如果幸运数字在 k+1 到 n 之间,小I的获胜概率也取决于下一轮的情况。

通过分析,我们可以得出,小I的最佳选择是将数字分成两部分,使得每一部分的数字数量尽可能接近。这样,无论幸运数字在哪一部分,小I的获胜概率都是最高的。

计算公式

通过数学推导,我们可以得出小I获胜的概率为:

小I获胜的概率=(n+1)//2n小I获胜的概率=n(n+1)//2​

其中,// 表示整数除法。

代码实现

def solution(n):
    if n == 1:
        return "{:.5f}".format(1.0)
    
    i_winning_prob = (n + 1) // 2 / n
    return "{:.5f}".format(i_winning_prob)

if __name__ == "__main__":
    n = int(input().strip())
    print(solution(n))

**

结论

通过上述分析和代码实现,我们可以计算出小I获胜的概率。这个概率在不同的 n 值下会有不同的结果,但总体上,小I的获胜概率与 n 的奇偶性有关。