Time taken by two persons to meet on a circular track

Given integers L, S1 and S2 where L is the length of a circular track in meters, S1 and S2 are the speeds of two persons in kilometers/hour moving in the same direction on the given track starting from the same starting point. The task is to find the following:

  • The time after which they will meet for the first time.
  • The time at which there are going to meet at the starting point.

Examples:

Input: L = 30, S1 = 5, S2 = 2
Output: Met first time after 10 hrs
Met at starting point after 30 hrs

Input: L = 10, S1 = 1, S2 = 2
Output: Met first time after 10 hrs
Met at starting point after 10 hrs



Approach:

  • For calculating the time at which they will first meet.
    • First of all, calculate the Relative speed i.e. S1 – S2.
    • Then use the formula, Time = Distance / Relative speed.
  • For calculating the time at which they will again meet at starting point.
    • First of all, calculate the time i.e. T1 and T2 which represent the time taken by both to cover 1 round of circular track by using the formula Time = Length of track / Speed.
    • Then calculate the LCM to know the time they will again meet at starting point.

Below is the implementation of the above approach:

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ implementation of above approach
#include <bits/stdc++.h>
using namespace std;
  
// Function to return the time when both the
// persons will meet at the starting point
int startingPoint(int Length, int Speed1, int Speed2)
{
    int result1 = 0, result2 = 0;
  
    // Time to cover 1 round by both
    int time1 = Length / Speed1;
    int time2 = Length / Speed2;
  
    result1 = __gcd(time1, time2);
  
    // Finding LCM to get the meeting point
    result2 = time1 * time2 / (result1);
  
    return result2;
}
  
// Function to return the time when both
// the persons will meet for the first time
float firstTime(int Length, int Speed1, int Speed2)
{
    float result = 0;
  
    int relativeSpeed = abs(Speed1 - Speed2);
  
    result = ((float)Length / relativeSpeed);
  
    return result;
}
  
// Driver Code
int main()
{
    int L = 30, S1 = 5, S2 = 2;
  
    // Calling function
    float first_Time = firstTime(L, S1, S2);
    int starting_Point = startingPoint(L, S1, S2);
  
    cout << "Met first time after "
         << first_Time << " hrs" << endl;
    cout << "Met at starting point after "
         << starting_Point << " hrs" << endl;
  
    return 0;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// Java implementation of above approach
public class GFG {
  
// Function to return the time when both the
// persons will meet at the starting point
    static int startingPoint(int Length, int Speed1, int Speed2) {
        int result1 = 0, result2 = 0;
  
        // Time to cover 1 round by both
        int time1 = Length / Speed1;
        int time2 = Length / Speed2;
  
        result1 = __gcd(time1, time2);
  
        // Finding LCM to get the meeting point
        result2 = time1 * time2 / (result1);
  
        return result2;
    }
  
    static int __gcd(int a, int b) {
        if (b == 0) {
            return a;
        }
        return __gcd(b, a % b);
  
    }
// Function to return the time when both
// the persons will meet for the first time
  
    static float firstTime(int Length, int Speed1, int Speed2) {
        float result = 0;
  
        int relativeSpeed = Math.abs(Speed1 - Speed2);
  
        result = ((float) Length / relativeSpeed);
  
        return result;
    }
  
// Driver Code
    public static void main(String[] args) {
        int L = 30, S1 = 5, S2 = 2;
  
        // Calling function
        float first_Time = firstTime(L, S1, S2);
        int starting_Point = startingPoint(L, S1, S2);
  
        System.out.println("Met first time after "
                + first_Time + " hrs");
        System.out.println("Met at starting point after "
                + starting_Point + " hrs");
  
    }
}

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# Python 3 implementation of
# above approach
  
# import gcd() from math lib
from math import gcd
  
# Function to return the time when both the
# persons will meet at the starting point
def startingPoint(Length, Speed1, Speed2) :
  
    result1 = 0
    result2 = 0
  
    # Time to cover 1 round by both
    time1 = Length // Speed1
    time2 = Length // Speed2
  
    result1 = gcd(time1, time2)
  
    # Finding LCM to get the meeting point
    result2 = time1 * time2 // (result1)
  
    return result2
  
# Function to return the time when both
# the persons will meet for the first time
def firstTime(Length, Speed1, Speed2) :
  
    result = 0
  
    relativeSpeed = abs(Speed1 - Speed2)
  
    result = Length / relativeSpeed 
  
    return result
  
# Driver Code
if __name__ == "__main__" :
      
    L = 30
    S1 = 5
    S2 = 2
  
    # Calling function
    first_Time = firstTime(L, S1, S2)
    starting_Point = startingPoint(L, S1, S2)
  
    print("Met first time after", first_Time, "hrs")
    print("Met at starting point after"
                  starting_Point, "hrs")
  
# This code is contributed by Ryuga

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// C# implementation of above approach 
using System; 
  
public class GFG {
   
// Function to return the time when both the
// persons will meet at the starting point
    static int startingPoint(int Length, int Speed1, int Speed2) {
        int result1 = 0, result2 = 0;
   
        // Time to cover 1 round by both
        int time1 = Length / Speed1;
        int time2 = Length / Speed2;
   
        result1 = __gcd(time1, time2);
   
        // Finding LCM to get the meeting point
        result2 = time1 * time2 / (result1);
   
        return result2;
    }
   
    static int __gcd(int a, int b) {
        if (b == 0) {
            return a;
        }
        return __gcd(b, a % b);
   
    }
// Function to return the time when both
// the persons will meet for the first time
   
    static float firstTime(int Length, int Speed1, int Speed2) {
        float result = 0;
   
        int relativeSpeed = Math.Abs(Speed1 - Speed2);
   
        result = ((float) Length / relativeSpeed);
   
        return result;
    }
   
// Driver Code
    public static void Main() {
        int L = 30, S1 = 5, S2 = 2;
   
        // Calling function
        float first_Time = firstTime(L, S1, S2);
        int starting_Point = startingPoint(L, S1, S2);
   
        Console.WriteLine("Met first time after "
                + first_Time + " hrs");
        Console.WriteLine("Met at starting point after "
                + starting_Point + " hrs");
   
    }
}
/*This code is contributed by 29AjayKumar*/

chevron_right


PHP

filter_none

edit
close

play_arrow

link
brightness_4
code

<?php 
// PHP implementation of above approach
  
function gcd ($a, $b
{
    return $b ? gcd($b, $a % $b) : $a;
}
  
// Function to return the time 
// when both the persons will 
// meet at the starting point
function startingPoint($Length, $Speed1
                                $Speed2)
{
    $result1 = 0;
    $result2 = 0;
  
    // Time to cover 1 round by both
    $time1 = $Length / $Speed1;
    $time2 = $Length / $Speed2;
  
    $result1 = gcd($time1, $time2);
  
    // Finding LCM to get the
    // meeting point
    $result2 = $time1 * $time2 / ($result1);
  
    return $result2;
}
  
// Function to return the time when both
// the persons will meet for the first time
function firstTime($Length, $Speed1, $Speed2)
{
    $result = 0;
  
    $relativeSpeed = abs($Speed1 - $Speed2);
  
    $result = ((float)$Length
                      $relativeSpeed);
  
    return $result;
}
  
// Driver Code
$L = 30;
$S1 = 5;
$S2 = 2;
  
// Calling function
$first_Time = firstTime($L, $S1, $S2);
$starting_Point = startingPoint($L, $S1, $S2);
  
echo "Met first time after ".
    $first_Time ." hrs" ."\n";
echo "Met at starting point after ".
    $starting_Point . " hrs" ."\n";
  
// This code is contributed 
// by ChitraNayal
?>

chevron_right


Output:

Met first time after 10 hrs
Met at starting point after 30 hrs


My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.



Improved By : Ryuga, Ita_c, 29AjayKumar