青训营刷题日记07 | 豆包MarsCode AI 刷题

63 阅读3分钟

今天又来刷题啦 问题描述 小R有两个正整数 a a和 b b,她将随机选择其中一个数并将其乘以 2 2。这个操作会进行两次,操作后的两个数之和会有所变化。小R想知道,操作结束后,两个数之和的期望值是多少?

解题思路

题目要求通过两次操作后计算两个数之和的期望值,以下是解题分析和计算方法:


1. 操作规则

每次操作中:

  • 随机选择一个数,将其乘以 2。
  • 有一半概率选择 aa,一半概率选择 bb。

两次操作的过程中,可能的结果由组合构成。


2. 枚举可能性

假设初始值为 aa 和 bb,通过两次操作后,可能的结果及其概率如下:

  1. 第一次选择 aa,第二次选择 aa:

    • 结果:a×2×2+b=4a+ba \times 2 \times 2 + b = 4a + b
    • 概率:14\frac{1}{4}
  2. 第一次选择 aa,第二次选择 bb:

    • 结果:a×2+b×2=2a+2ba \times 2 + b \times 2 = 2a + 2b
    • 概率:14\frac{1}{4}
  3. 第一次选择 bb,第二次选择 aa:

    • 结果:b×2+a×2=2a+2bb \times 2 + a \times 2 = 2a + 2b
    • 概率:14\frac{1}{4}
  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. 样例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. 样例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. 样例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),仅用常数空间存储中间结果。

该代码正确实现了期望值计算,满足题目要求。

心态和感悟

今天的刷题让我深刻体会到逻辑推导和数学公式在编程中的重要性。一开始看到题目时,我觉得期望值的计算会很复杂,但在分析了操作规则和所有可能性后,发现其实有规律可循。这让我意识到,面对复杂问题时,拆解问题、找出本质规律是关键。

同时,在编写代码的过程中,我感受到严谨性的必要性。特别是在处理数学计算时,任何一个公式错误或者小数处理不当都会导致结果出错。这让我对细心和耐心有了更深刻的认识。

刷完题后,我感到一种小小的成就感。这种从“问题看似复杂”到“找到思路并解决”的过程真的很有趣!未来,我希望自己能更加熟练地应用数学推导和编程技巧,挑战更多难度更高的题目!