青训营X豆包MarsCode技术训练营|豆包MarsCode AI刷题

59 阅读3分钟

今天来道困难题 概率游戏(其实是简单题难度)

问题描述

小U在玩一个盲盒交换游戏,给定两个参数:nk。将以下公式化简:

12+12(2k1+k1)n\frac{1}{2} + \frac{1}{2} \left( \frac{2k}{1+k} - 1 \right)^n

这个公式最终的结果可以简化成一个最简分数 p/q,小U想知道 p+q 的值模10的结果是多少。


测试样例

样例1:

输入:n = 2 ,k = 5
输出:1

样例2:

输入:n = 2 ,k = 6
输出:6

样例3:

输入:n = 3 ,k = 7
输出:9

样例4:

输入:n = 3 ,k = 9
输出:9

问题分析

给定公式:

12+12(2k1+k1)n\frac{1}{2} + \frac{1}{2} \left( \frac{2k}{1+k} - 1 \right)^n

要求化简后得到的最简分数的 p/q,然后计算 p + q 的结果,最后输出 p + q 对 10 的模。

1. 分析公式结构

这个公式分为两部分:

  • 第一部分是常数 12\frac{1}{2}
  • 第二部分是 12(2k1+k1)n\frac{1}{2} \left( \frac{2k}{1+k} - 1 \right)^n,需要化简其中的表达式。
1.1 化简第二部分的表达式

我们先来看第二部分:

12(2k1+k1)n\frac{1}{2} \left( \frac{2k}{1+k} - 1 \right)^n

首先,化简括号里的表达式:

2k1+k1=2k1+k1+k1+k=2k(1+k)1+k=k1k+1\frac{2k}{1+k} - 1 = \frac{2k}{1+k} - \frac{1+k}{1+k} = \frac{2k - (1 + k)}{1+k} = \frac{k - 1}{k + 1}

所以,第二部分可以写成:

12(k1k+1)n\frac{1}{2} \left( \frac{k-1}{k+1} \right)^n
1.2 总体公式

结合第一部分和第二部分,我们的最终公式是:

12+12(k1k+1)n\frac{1}{2} + \frac{1}{2} \left( \frac{k-1}{k+1} \right)^n

可以提取出公因子 12\frac{1}{2},得到:

12(1+(k1k+1)n)\frac{1}{2} \left( 1 + \left( \frac{k-1}{k+1} \right)^n \right)

2. 化简结果

我们需要将 12(1+(k1k+1)n)\frac{1}{2} \left( 1 + \left( \frac{k-1}{k+1} \right)^n \right) 化简成最简分数形式 p/q。为了方便后续的计算,先对其进行通分。

2.1 求表达式的分数形式

设:

x=(k1k+1)nx = \left( \frac{k-1}{k+1} \right)^n

那么,我们的公式变成:

12(1+x)=1+x2\frac{1}{2} \left( 1 + x \right) = \frac{1 + x}{2}

进一步化简后,将结果表示为分数。这样等会写代码逻辑的时候就很容易写了。

3. 模10计算

得到最简分数形式 p/q 后,我们需要计算 p + q 的结果,并输出 p + q 对 10 的模。

4. 样例分析

其实案例比较简单,这边直接带入公式计算就行了,没必要花里胡哨,浪费键盘耐久度。

样例1:n = 2, k = 5

公式:

12+12(2×51+51)2\frac{1}{2} + \frac{1}{2} \left( \frac{2 \times 5}{1 + 5} - 1 \right)^2

化简:

12+12(1061)2=12+12(46)2=12+12×(23)2=12+12×49\frac{1}{2} + \frac{1}{2} \left( \frac{10}{6} - 1 \right)^2 = \frac{1}{2} + \frac{1}{2} \left( \frac{4}{6} \right)^2 = \frac{1}{2} + \frac{1}{2} \times \left( \frac{2}{3} \right)^2 = \frac{1}{2} + \frac{1}{2} \times \frac{4}{9}
=12+29=918+418=1318= \frac{1}{2} + \frac{2}{9} = \frac{9}{18} + \frac{4}{18} = \frac{13}{18}

因此,结果是 13/18p + q = 13 + 18 = 3131 % 10 = 1

样例2:n = 2, k = 6

公式:

12+12(2×61+61)2\frac{1}{2} + \frac{1}{2} \left( \frac{2 \times 6}{1 + 6} - 1 \right)^2

化简:

12+12(1271)2=12+12(57)2=12+12×2549\frac{1}{2} + \frac{1}{2} \left( \frac{12}{7} - 1 \right)^2 = \frac{1}{2} + \frac{1}{2} \left( \frac{5}{7} \right)^2 = \frac{1}{2} + \frac{1}{2} \times \frac{25}{49}
=12+2598=4998+2598=7498=3749= \frac{1}{2} + \frac{25}{98} = \frac{49}{98} + \frac{25}{98} = \frac{74}{98} = \frac{37}{49}

因此,结果是 37/49p + q = 37 + 49 = 8686 % 10 = 6

样例3:n = 3, k = 7

公式:

12+12(2×71+71)3\frac{1}{2} + \frac{1}{2} \left( \frac{2 \times 7}{1 + 7} - 1 \right)^3

化简:

12+12(1481)3=12+12(68)3=12+12×(34)3\frac{1}{2} + \frac{1}{2} \left( \frac{14}{8} - 1 \right)^3 = \frac{1}{2} + \frac{1}{2} \left( \frac{6}{8} \right)^3 = \frac{1}{2} + \frac{1}{2} \times \left( \frac{3}{4} \right)^3
=12+12×2764=12+27128=64128+27128=91128= \frac{1}{2} + \frac{1}{2} \times \frac{27}{64} = \frac{1}{2} + \frac{27}{128} = \frac{64}{128} + \frac{27}{128} = \frac{91}{128}

因此,结果是 91/128p + q = 91 + 128 = 219219 % 10 = 9

样例4:n = 3, k = 9

公式:

12+12(2×91+91)3\frac{1}{2} + \frac{1}{2} \left( \frac{2 \times 9}{1 + 9} - 1 \right)^3

化简:

12+12(18101)3=12+12(810)3=12+12×(45)3\frac{1}{2} + \frac{1}{2} \left( \frac{18}{10} - 1 \right)^3 = \frac{1}{2} + \frac{1}{2} \left( \frac{8}{10} \right)^3 = \frac{1}{2} + \frac{1}{2} \times \left( \frac{4}{5} \right)^3
=12+12×64125=12+64250=125250+64250=189250= \frac{1}{2} + \frac{1}{2} \times \frac{64}{125} = \frac{1}{2} + \frac{64}{250} = \frac{125}{250} + \frac{64}{250} = \frac{189}{250}

因此,结果是 189/250p + q = 189 + 250 = 439439 % 10 = 9

5. 代码实现

from fractions import Fraction

def solution(n, k):
    # 计算 (k-1)/(k+1) 的 n 次方,这里的x直接用的刚才上面推理的x
    x = Fraction(k - 1, k + 1) ** n
    # 计算总结果
    result = Fraction(1, 2) + Fraction(1, 2) * x
    # 分子和分母
    p = result.numerator
    q = result.denominator
    # 返回 p + q % 10
    return (p + q) % 10