Codeforces竞赛中Python函数fun1与fun2的输出差异场景探究
两个函数输出不同的场景分析
首先明确:两个函数在divmod(n, target)的余数r=0时行为完全一致,差异仅出现在r≠0的情况。
当满足以下条件时,fun1和fun2的输出结果不同:
divmod(n, target)得到的余数r≠0n // (q+1) ≠ r(其中q是divmod返回的商)
具体例子
例1:n=8,target=5
fun1执行:divmod(8,5)得到q=1,r=3,返回(3, 1)fun2执行:计算8//(1+1)=4,返回(4, 1)
两者第一个返回值不同,结果不一致。
例2:n=10,target=3
fun1执行:divmod(10,3)得到q=3,r=1,返回(1, 3)fun2执行:计算10//(3+1)=2,返回(2, 3)
结果明显不同。
差异原因分析
从数学表达式推导:
已知n = q*target + r(0 < r < target),fun2的第一个返回值是n//(q+1),展开后:
n//(q+1) = (q*target + r) // (q+1) = (r*(q+1) + q*(target - r)) // (q+1) = r + q*(target - r) // (q+1)
- 当
q*(target - r) ≥ q+1时,q*(target - r)//(q+1) ≥1,此时n//(q+1) = r + k(k≥1),必然不等于r,两个函数结果不同。 - 当
q*(target - r) < q+1时,q*(target - r)//(q+1)=0,此时n//(q+1)=r,两个函数结果一致。
比如结果一致的例子:n=9,target=5divmod(9,5)得到q=1,r=4,q*(target-r)=1*(5-4)=1 < 1+1=2,所以9//2=4=r,两个函数都返回(4,1)。
内容的提问来源于stack exchange,提问作者jackyooo
相关产品推荐
相关产品推荐

