You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请教HackerRank Number Line Jumps中公式(x2-x1)%(v1-v2)==0的原理

数轴跳跃问题的公式原理解释

先从问题本质入手:两只袋鼠同时起跳,每次跳跃的次数完全一致,要判断它们会不会在某一时刻处于同一位置,我们可以用数学等式来拆解这个问题。

假设跳了k次后相遇(k必须是≥0的整数——总不能跳负数次或者半次吧),此时两只袋鼠的位置必然相等,所以可以列出等式:

x1 + k * v1 = x2 + k * v2

接下来对等式做变形整理:

  1. 把带k的项移到一侧,常数项移到另一侧:
    x1 - x2 = k * v2 - k * v1
    
  2. 把右边的k提取出来:
    x1 - x2 = k * (v2 - v1)
    
  3. 两边同时乘-1调整符号,和题解里的公式对应上:
    x2 - x1 = k * (v1 - v2)
    

现在要算出k的取值,就可以得到:

k = (x2 - x1) / (v1 - v2)

要让这个k符合实际情况,得满足两个核心条件:

  • 首先,v1 - v2不能为0——也就是两只袋鼠速度不能相同,不然要么一开始就在一起,要么永远追不上。
  • 其次,(x2 - x1)必须能被(v1 - v2)整除,也就是题解里的(x2-x1)%(v1-v2)==0,这样算出来的k才是整数,毕竟跳半次不算数。
  • 最后还要保证k是非负的:比如如果袋鼠1初始位置在袋鼠2后面(x1 < x2),那袋鼠1的速度必须比袋鼠2快(v1 > v2),这时候v1 - v2是正数,x2 - x1也是正数,算出来的k是正整数;如果袋鼠1在前面(x1 > x2),那袋鼠2的速度得更快(v2 > v1),这时候x2 - x1是负数,v1 - v2也是负数,负负得正,k还是正整数。

你的代码用循环模拟跳跃的思路是对的,但如果初始位置差特别大,循环次数会很多,效率不如数学公式直接计算来得高。

内容的提问来源于stack exchange,提问作者Đồng Nguyễn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 12:42:31