📜  查找两个人是否在经过相同的跳跃次数后相遇

📅  最后修改于: 2021-04-29 18:12:23             🧑  作者: Mango

两个人从两个不同的点p1和p2开始比赛。它们跳跃覆盖了s1和s2米。找出他们是否会在相同次数的跳跃后相遇。

例子:

Input : p1 = 6, s1 = 3, 
        p2 = 8, s2 = 2
Output : Yes
Explanation: 6->9->12
             8->10->12
They meet after two jumps.

Input : p1 = 4, s1 = 4, 
        p2 = 8, s2 = 2
Output : Yes
Explanation: 4->8->12
             8->10->12

Input : p1 = 0, s1 = 2, 
        p2 = 5, s2 = 3
Output : No

Input : p1 = 42, s1 = 3, 
        p2 = 94, s2 = 2
Output : Yes

一个简单的解决方案是使它们一个接一个地跳跃。每次跳跃后,查看它们是否在同一点。

一个有效的解决方案基于以下事实:
由于起点总是不同的,因此如果满足以下条件,它们将满足。
(1)速度不一样
(2)速度之间的差异除以初始点之间的总距离。

C++
// C++ program to find any one of them
// can overtake the other
#include
using namespace std;
  
// function to find if any one of them can
// overtake the other
bool sackRace(int p1, int s1, int p2, int s2){
  
    // Since starting points are always
    // different, they will meet if following 
    // conditions are met.
    // (1) Speeds are not same
    // (2) Difference between speeds divide the
    //     total distance between initial points.    
    return ( (s1 > s2 && (p2 - p1) % (s1 - s2) == 0) ||
             (s2 > s1 && (p1 - p2) % (s2 - s1) == 0));
}
  
// driver program
int main()
{
    int p1 = 4, s1 = 4, p2 = 8, s2 = 2;
    sackRace(p1, s1, p2, s2)? cout << "Yes\n" :
                              cout << "No\n";
    return 0;
}


Java
// java program to find any one of them
// can overtake the other
import java.util.Arrays;
  
public class GFG {
      
    // function to find if any one of
    // them can overtake the other
    static boolean sackRace(int p1, int s1,
                            int p2, int s2)
    {
      
        // Since starting points are 
        // always different, they will
        // meet if following conditions
        // are met.
        // (1) Speeds are not same
        // (2) Difference between speeds
        // divide the total distance 
        // between initial points. 
        return ( (s1 > s2 && (p2 - p1) %
                    (s1 - s2) == 0) ||
                    (s2 > s1 && (p1 - p2)
                    % (s2 - s1) == 0));
    }
      
    public static void main(String args[])
    {
        int p1 = 4, s1 = 4, p2 = 8, s2 = 2;
          
        if(sackRace(p1, s1, p2, s2))
            System.out.println("Yes" );
        else
            System.out.println("No");
  
    }
}
  
// This code is contributed by Sam007.


Python3
# python program to find any one of them
# can overtake the other
  
# function to find if any one of them can
# overtake the other
def sackRace(p1, s1, p2, s2):
      
    # Since starting points are always
    # different, they will meet if following 
    # conditions are met.
    # (1) Speeds are not same
    # (2) Difference between speeds divide the
    #     total distance between initial points. 
    return ( (s1 > s2 and (p2 - p1) % (s1 - s2) == 0) 
         or (s2 > s1 and (p1 - p2) % (s2 - s1) == 0))
  
  
# driver program
p1 = 4
s1 = 4
p2 = 8
s2 = 2
if(sackRace(p1, s1, p2, s2)):
    print("Yes")
else:
    print("No")
      
# This code is contributed by Sam007


C#
// C# program to find any one of them
// can overtake the other
using System;
  
class GFG {
      
    // function to find if any one of
    // them can overtake the other
    static bool sackRace(int p1, int s1,
                          int p2, int s2)
    {
      
        // Since starting points are 
        // always different, they will
        // meet if following conditions
        // are met.
        // (1) Speeds are not same
        // (2) Difference between speeds
        // divide the total distance 
        // between initial points. 
        return ( (s1 > s2 && (p2 - p1) %
                       (s1 - s2) == 0) ||
                    (s2 > s1 && (p1 - p2)
                       % (s2 - s1) == 0));
    }
      
    // Driver code
    public static void Main() 
    {
        int p1 = 4, s1 = 4, p2 = 8,
        s2 = 2;
          
        if(sackRace(p1, s1, p2, s2))
            Console.WriteLine("Yes" );
        else
            Console.WriteLine("No");
                                  
    }
}
  
// This code is contributed by Sam007.


PHP
 $s2 && ($p2 - $p1) % ($s1 - $s2) == 0) ||
            ($s2 > $s1 && ($p1 - $p2) % ($s2 - $s1) == 0));
}
  
    // Driver Code
    $p1 = 4;
    $s1 = 4;
    $p2 = 8;
    $s2 = 2;
    if(sackRace($p1, $s1, $p2, $s2))
        echo "Yes\n" ;
    else
        echo "No\n"; 
          
// This code is contributed by Sam007
?>


输出 :

Yes