一、题目背景与解析
问题描述
小R随机选择两个正整数 a 和 b 之一,并将其乘以 2。这一操作将执行两次,之后计算两个数的和。题目要求计算操作结束后两个数之和的期望值。
关键点:
- 每次操作有 1/21/21/2 的概率选择
a或b。 - 两次独立操作后,最终和的期望值需要通过概率加权平均计算。
二、公式推导与思路分析
-
单次操作的效果:
- 操作一共有两次,因此每个数字 aaa 或 bbb 都可能被选择并乘以 222 一次或两次。
- 在某一次操作中,有 1/21/21/2 的概率选择 aaa 或 bbb。
-
结果空间分析:
-
初始和为 a+ba + ba+b。
-
每次被操作的数字会增加自身的倍数贡献,具体有以下几种情况:
- aaa 被选两次:最终和为 4a+b4a + b4a+b。
- bbb 被选两次:最终和为 a+4ba + 4ba+4b。
- aaa 和 bbb 各被选一次:最终和为 2a+2b2a + 2b2a+2b。
-
-
期望值公式:
- 对每种情况,考虑其概率和对应的和: E=14(4a+b)+14(a+4b)+12(2a+2b)E = \frac{1}{4}(4a + b) + \frac{1}{4}(a + 4b) + \frac{1}{2}(2a + 2b)E=41(4a+b)+41(a+4b)+21(2a+2b)
- 简化公式得到: E=94(a+b)E = \frac{9}{4}(a + b)E=49(a+b)
因此,两个数之和的期望值公式为:
E=94(a+b)E = \frac{9}{4}(a + b)E=49(a+b)
三、代码实现与解释
python
def solution(a: int, b: int) -> str:
# 期望值公式
expected_value = 9 * (a + b) / 4
# 格式化结果为两位小数
return f"{expected_value:.2f}"
if __name__ == '__main__':
# 测试用例
print(solution(3, 3) == '13.50')
print(solution(5, 7) == '27.00')
print(solution(1, 1) == '4.50')
代码解释:
- 直接利用公式 E=94(a+b)E = \frac{9}{4}(a + b)E=49(a+b) 计算期望值。
- 使用
f"{value:.2f}"将结果格式化为两位小数,满足题目输出要求。
四、测试用例分析
测试用例1:
- 输入:
a = 3,b = 3 - 计算: E=94(3+3)=94⋅6=13.5E = \frac{9}{4}(3 + 3) = \frac{9}{4} \cdot 6 = 13.5E=49(3+3)=49⋅6=13.5
- 输出:
'13.50'
测试用例2:
- 输入:
a = 5,b = 7 - 计算: E=94(5+7)=94⋅12=27.0E = \frac{9}{4}(5 + 7) = \frac{9}{4} \cdot 12 = 27.0E=49(5+7)=49⋅12=27.0
- 输出:
'27.00'
测试用例3:
- 输入:
a = 1,b = 1 - 计算: E=94(1+1)=94⋅2=4.5E = \frac{9}{4}(1 + 1) = \frac{9}{4} \cdot 2 = 4.5E=49(1+1)=49⋅2=4.5
- 输出:
'4.50'
五、知识总结与个人思考
1. 概率与期望的关系:
- 期望值的计算是一种加权平均思想,即将每个可能结果按其概率进行加权求和。理解概率空间和结果的可能性分布是关键。
2. 数学公式化的重要性:
- 本题展示了如何通过公式推导避免穷举复杂概率分布,从而提升效率和代码简洁性。
3. 格式化输出的注意点:
- 使用
f-string格式化输出非常便利,特别是在要求严格格式化结果的场景中。
个人思考:
- 本题强调了公式推导的简化作用。在实际应用中,这种抽象思维有助于快速解决问题并优化代码逻辑。对于更复杂的期望值计算问题,也可以采用动态规划或递推的方式。
六、学习计划与建议
-
概率基础学习:
- 复习概率论中的基本公式和概念,特别是期望值、独立事件和条件概率的计算。
-
应用场景拓展:
- 练习其他涉及期望计算的题目,如博弈问题、随机变量的期望值计算等。
-
代码优化能力提升:
- 结合实际问题练习公式推导和优化代码,提高数学建模能力。
七、总结
本题通过概率与期望的简单应用,展示了如何利用数学推导高效求解实际问题。公式推导是解决此类问题的核心,通过简化计算避免了复杂的穷举过程。掌握这类问题的思路,可以帮助我们在算法设计和概率应用中更上一层楼!