问题描述
在一个数字游戏中,数字 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都采取最优策略。这意味着他们会尽量最大化自己的获胜概率。
基本思路
-
边界情况:
- 当
n = 1时,幸运数字只能是 1,小I必然获胜,获胜概率为 1。
- 当
-
一般情况:
- 当
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 的奇偶性有关。