题目思路讲解
假设我们有两个正整数 𝑎a 和 𝑏b。题目要求我们对这两个数进行两次独立的随机操作,每次操作以等概率(即 1221)选择其中一个数并将其值翻倍。我们需要计算经过这两次操作后,𝑎a 和 𝑏b 之和的期望值。
分析过程
-
单次操作的期望值:
-
每次操作都有 1221 的概率选择 𝑎a 或 𝑏b 并将其翻倍。
-
因此,单次操作后 𝑎a 和 𝑏b 的期望值分别为:
- 𝐸(𝑎)=12𝑎+12(2𝑎)=32𝑎E(a)=21a+21(2a)=23a
- 𝐸(𝑏)=12𝑏+12(2𝑏)=32𝑏E(b)=21b+21(2b)=23b
-
-
两次操作的期望值:
-
由于每次操作是独立的,两次操作后的期望值可以通过将单次操作的期望值相乘得到。
-
两次操作后 𝑎a 和 𝑏b 的期望值分别为:
- 𝐸(𝑎)=(32)2𝑎=94𝑎E(a)=(23)2a=49a
- 𝐸(𝑏)=(32)2𝑏=94𝑏E(b)=(23)2b=49b
-
-
总和的期望值:
-
经过两次操作后,𝑎a 和 𝑏b 之和的期望值为:
- 𝐸(𝑎+𝑏)=𝐸(𝑎)+𝐸(𝑏)=94𝑎+94𝑏=94(𝑎+𝑏)E(a+b)=E(a)+E(b)=49a+49b=49(a+b)
-
代码分析
Python
深色版本
def solution(a: int, b: int) -> str:
# 计算期望值
E = (9 * (a + b)) / 4
# 将期望值格式化为保留两位小数的字符串
return f"{E:.2f}"
if __name__ == '__main__':
# 测试用例
print(solution(3, 3) == '13.50') # 应输出 True
print(solution(5, 7) == '27.00') # 应输出 True
print(solution(1, 1) == '4.50') # 应输出 True
代码解释
-
函数定义:
solution(a: int, b: int) -> str: 定义了一个函数solution,接受两个整数参数a和b,并返回一个字符串。
-
计算期望值:
E = (9 * (a + b)) / 4: 根据前面的分析,计算 𝑎a 和 𝑏b 之和的期望值。return f"{E:.2f}": 使用 f-string 将期望值格式化为保留两位小数的字符串。
-
测试用例:
print(solution(3, 3) == '13.50'): 测试当 𝑎=3a=3 和 𝑏=3b=3 时,期望值是否为 13.50。print(solution(5, 7) == '27.00'): 测试当 𝑎=5a=5 和 𝑏=7b=7 时,期望值是否为 27.00。print(solution(1, 1) == '4.50'): 测试当 𝑎=1a=1 和 𝑏=1b=1 时,期望值是否为 4.50。