每日一题:数值操作的期望计算问题 | 豆包MarsCode AI 刷题

163 阅读3分钟

题目描述

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

例如:如果 a=3和 b=3,那么有 1/2 的概率两数之和为 12,1/2的概率两数之和为 15。因此,期望值为 13.5。

image.png

思考思路

这个题目是一个数学计算问题。

为了计算两个数 a 和 b 经过两次随机选择其中一个数并将其乘以 2 操作后,它们之和的期望值,我们可以考虑所有可能的情况。每次操作都有两种可能性(选择 a 或选择 b),所以两次操作共有四种情况。

  1. 初始状态

    • 初始时,两个数分别为 a 和 b,它们的和为 S=a+b。
  2. 操作过程

每次操作有两种选择:选择 a 或选择 b,并将选中的数乘以 2。

这个操作会进行两次,因此总共有四种不同的情况:

设原始的和为 S=a+b。下面列出所有情况及其结果:

  1. 第一次和第二次都选择了 a: 结果为 4a+b

  2. 第一次选择了 a,第二次选择了 b:结果为 2a+2b

  3. 第一次选择了 b,第二次选择了 a:结果为 2a+2b

  4. 第一次和第二次都选择了 b: 结果为 a+4b

每种情况发生的概率都是 1/4。因此,操作后两个数之和的期望值 E 可以表示为:

E=1/4(4a+b)+1/4(2a+2b)+1/4(2a+2b)+1/4(a+4b)

简化上述表达式:

E=1/4(4a+b+2a+2b+2a+2b+a+4b)

E=1/4(9a+9b)

E=9/4(a+b)

E=2.25(a+b)

实现

  1. 定义函数

    • 定义一个函数 expected_sum(a, b),该函数接受两个正整数 a 和 b作为参数,返回操作后两个数之和的期望值。
  2. 计算期望值

    • 使用公式 E=2.25(a+b) 计算期望值。
  3. 格式化输出

    • 将计算结果格式化为保留两位小数的字符串。

代码实现

def solution(a: int, b: int) -> str:
    # 共4种情况
    # 一:1、2次都选择a res=4*a+b
    # 二:1、2次都选择b res=a+4*b
    # 三:1次a,2次b res=2*a+2*b
    # 四:1次b,2次a res=2*b+2*a
    ## 每种情况概率为1/4 E=1/4*(4*a+b)+1/4*(4*b+a)+1/4*(2*a+2*b)+1/4*(2*b+2*a)
    # 化简 E = 2.25 * (a + b)
    E = 2.25 * (a + b)
    return '{:.2f}'.format(E)

if __name__ == '__main__':
    print(solution(3, 3) == '13.50')
    print(solution(5, 7) == '27.00')
    print(solution(1, 1) == '4.50')

回顾与总结

该题目的难点主要在于研究问题,考虑问题描述的所有情况,最终将问题转化为数学表达式。