Open In App

Time taken by two persons to meet on a circular track

Improve
Improve
Like Article
Like
Save
Share
Report

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++




// 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;
}


Java




// 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");
 
    }
}


Python3




# 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


C#




// 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*/


PHP




<?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
?>


Javascript




<script>
// javascript implementation of above approach
 
    // Function to return the time when both the
    // persons will meet at the starting point
    function startingPoint(Length , Speed1 , Speed2)
    {
        var result1 = 0, result2 = 0;
 
        // Time to cover 1 round by both
        var time1 = Length / Speed1;
        var time2 = Length / Speed2;
 
        result1 = __gcd(time1, time2);
 
        // Finding LCM to get the meeting point
        result2 = time1 * time2 / (result1);
 
        return result2;
    }
 
    function __gcd(a , 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
    function firstTime(Length , Speed1 , Speed2)
    {
        var result = 0;
        var relativeSpeed = Math.abs(Speed1 - Speed2);
        result = ( Length / relativeSpeed);
        return result;
    }
 
    // Driver Code   
    var L = 30, S1 = 5, S2 = 2;
 
        // Calling function
        var first_Time = firstTime(L, S1, S2);
        var starting_Point = startingPoint(L, S1, S2);
 
        document.write("Met first time after " + first_Time + " hrs<br/>");
        document.write("Met at starting point after " + starting_Point + " hrs");
 
// This code is contributed by todaysgaurav
</script>


Output: 

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

 

Time Complexity: O(log(max(t1,t2)), where t1, t2 are time corresponding to given distance and speeds.

Auxiliary Space: O(1), since no extra space has been taken.



Last Updated : 08 Jul, 2022
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads