今天又来刷题啦 问题描述 小R有两个正整数 a a和 b b,她将随机选择其中一个数并将其乘以 2 2。这个操作会进行两次,操作后的两个数之和会有所变化。小R想知道,操作结束后,两个数之和的期望值是多少?
解题思路
题目要求通过两次操作后计算两个数之和的期望值,以下是解题分析和计算方法:
1. 操作规则
每次操作中:
- 随机选择一个数,将其乘以 2。
- 有一半概率选择 aa,一半概率选择 bb。
两次操作的过程中,可能的结果由组合构成。
2. 枚举可能性
假设初始值为 aa 和 bb,通过两次操作后,可能的结果及其概率如下:
-
第一次选择 aa,第二次选择 aa:
- 结果:a×2×2+b=4a+ba \times 2 \times 2 + b = 4a + b
- 概率:14\frac{1}{4}
-
第一次选择 aa,第二次选择 bb:
- 结果:a×2+b×2=2a+2ba \times 2 + b \times 2 = 2a + 2b
- 概率:14\frac{1}{4}
-
第一次选择 bb,第二次选择 aa:
- 结果:b×2+a×2=2a+2bb \times 2 + a \times 2 = 2a + 2b
- 概率:14\frac{1}{4}
-
第一次选择 bb,第二次选择 bb:
- 结果:b×2×2+a=4b+ab \times 2 \times 2 + a = 4b + a
- 概率:14\frac{1}{4}
3. 期望值计算
根据期望的定义,期望值为各可能结果乘以其概率的总和:
期望值=14(4a+b)+14(2a+2b)+14(2a+2b)+14(a+4b)\text{期望值} = \frac{1}{4}(4a + b) + \frac{1}{4}(2a + 2b) + \frac{1}{4}(2a + 2b) + \frac{1}{4}(a + 4b)
整理后:
期望值=9a+9b4=9(a+b)4\text{期望值} = \frac{9a + 9b}{4} = \frac{9(a + b)}{4}
实现代码
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') # 测试样例1
print(solution(5, 7) == '27.00') # 测试样例2
print(solution(1, 1) == '4.50') # 测试样例3
测试样例
-
样例1:
- 输入:a=3,b=3a = 3, b = 3
- 计算期望值:9×(3+3)4=13.50\frac{9 \times (3 + 3)}{4} = 13.50
- 输出:
13.50
-
样例2:
- 输入:a=5,b=7a = 5, b = 7
- 计算期望值:9×(5+7)4=27.00\frac{9 \times (5 + 7)}{4} = 27.00
- 输出:
27.00
-
样例3:
- 输入:a=1,b=1a = 1, b = 1
- 计算期望值:9×(1+1)4=4.50\frac{9 \times (1 + 1)}{4} = 4.50
- 输出:
4.50
时间复杂度和空间复杂度
- 时间复杂度:O(1)O(1),计算期望值的公式只需常数时间。
- 空间复杂度:O(1)O(1),仅用常数空间存储中间结果。
该代码正确实现了期望值计算,满足题目要求。
心态和感悟
今天的刷题让我深刻体会到逻辑推导和数学公式在编程中的重要性。一开始看到题目时,我觉得期望值的计算会很复杂,但在分析了操作规则和所有可能性后,发现其实有规律可循。这让我意识到,面对复杂问题时,拆解问题、找出本质规律是关键。
同时,在编写代码的过程中,我感受到严谨性的必要性。特别是在处理数学计算时,任何一个公式错误或者小数处理不当都会导致结果出错。这让我对细心和耐心有了更深刻的认识。
刷完题后,我感到一种小小的成就感。这种从“问题看似复杂”到“找到思路并解决”的过程真的很有趣!未来,我希望自己能更加熟练地应用数学推导和编程技巧,挑战更多难度更高的题目!