今天来道困难题 概率游戏(其实是简单题难度)
问题描述
小U在玩一个盲盒交换游戏,给定两个参数:n和k。将以下公式化简:
21+21(1+k2k−1)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
问题分析
给定公式:
21+21(1+k2k−1)n
要求化简后得到的最简分数的 p/q,然后计算 p + q 的结果,最后输出 p + q 对 10 的模。
1. 分析公式结构
这个公式分为两部分:
- 第一部分是常数 21。
- 第二部分是 21(1+k2k−1)n,需要化简其中的表达式。
1.1 化简第二部分的表达式
我们先来看第二部分:
21(1+k2k−1)n
首先,化简括号里的表达式:
1+k2k−1=1+k2k−1+k1+k=1+k2k−(1+k)=k+1k−1
所以,第二部分可以写成:
21(k+1k−1)n
1.2 总体公式
结合第一部分和第二部分,我们的最终公式是:
21+21(k+1k−1)n
可以提取出公因子 21,得到:
21(1+(k+1k−1)n)
2. 化简结果
我们需要将 21(1+(k+1k−1)n) 化简成最简分数形式 p/q。为了方便后续的计算,先对其进行通分。
2.1 求表达式的分数形式
设:
x=(k+1k−1)n
那么,我们的公式变成:
21(1+x)=21+x
进一步化简后,将结果表示为分数。这样等会写代码逻辑的时候就很容易写了。
3. 模10计算
得到最简分数形式 p/q 后,我们需要计算 p + q 的结果,并输出 p + q 对 10 的模。
4. 样例分析
其实案例比较简单,这边直接带入公式计算就行了,没必要花里胡哨,浪费键盘耐久度。
样例1:n = 2, k = 5
公式:
21+21(1+52×5−1)2
化简:
21+21(610−1)2=21+21(64)2=21+21×(32)2=21+21×94
=21+92=189+184=1813
因此,结果是 13/18,p + q = 13 + 18 = 31,31 % 10 = 1。
样例2:n = 2, k = 6
公式:
21+21(1+62×6−1)2
化简:
21+21(712−1)2=21+21(75)2=21+21×4925
=21+9825=9849+9825=9874=4937
因此,结果是 37/49,p + q = 37 + 49 = 86,86 % 10 = 6。
样例3:n = 3, k = 7
公式:
21+21(1+72×7−1)3
化简:
21+21(814−1)3=21+21(86)3=21+21×(43)3
=21+21×6427=21+12827=12864+12827=12891
因此,结果是 91/128,p + q = 91 + 128 = 219,219 % 10 = 9。
样例4:n = 3, k = 9
公式:
21+21(1+92×9−1)3
化简:
21+21(1018−1)3=21+21(108)3=21+21×(54)3
=21+21×12564=21+25064=250125+25064=250189
因此,结果是 189/250,p + q = 189 + 250 = 439,439 % 10 = 9。
5. 代码实现
from fractions import Fraction
def solution(n, k):
x = Fraction(k - 1, k + 1) ** n
result = Fraction(1, 2) + Fraction(1, 2) * x
p = result.numerator
q = result.denominator
return (p + q) % 10