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++
// 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 pointint 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 timefloat firstTime(int Length, int Speed1, int Speed2){ float result = 0; int relativeSpeed = abs(Speed1 - Speed2); result = ((float)Length / relativeSpeed); return result;}// Driver Codeint 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 approachpublic 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 libfrom math import gcd# Function to return the time when both the# persons will meet at the starting pointdef 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 timedef firstTime(Length, Speed1, Speed2) : result = 0 relativeSpeed = abs(Speed1 - Speed2) result = Length / relativeSpeed return result# Driver Codeif __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 approachfunction gcd ($a, $b) { return $b ? gcd($b, $a % $b) : $a;}// Function to return the time // when both the persons will // meet at the starting pointfunction 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 timefunction 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.
Feeling lost in the world of random DSA topics, wasting time without progress? It’s time for a change! Join our DSA course, where we’ll guide you on an exciting journey to master DSA efficiently and on schedule.
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 zambiatek!
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 zambiatek!



