Número de puntos de encuentro distintos en una carretera circular

Considere dos automóviles A y B que corren infinitamente (ya sea en sentido horario o antihorario) en una carretera circular. Dada la velocidad de los autos a y b . Si a o b es positivo, indica que se están moviendo en el sentido de las agujas del reloj, de lo contrario, se están moviendo en el sentido contrario a las agujas del reloj. La tarea es encontrar el número de puntos distintos en los que se encontrarán.
Ejemplos: 
 

Input : a = 1, b = -1
Output : 2

Explanation
Car A is moving clockwise while Car B is moving anti-clockwise but their
speeds are same, so they will meet at two points i.e at the starting point
and diametrically corresponding opposite point on the road.

Input : a = 1, b = 2
Output : 1

Requisitos previos : GCD | MCM
 

Aproximación
Sea d la circunferencia de la carretera circular . Sea t a y t b respectivamente
el tiempo que tardan los coches A y B. Su velocidad relativa es a – b . A y B comienzan desde el punto de partida y después de un tiempo, se encontrarán en el punto de partida nuevamente. Este tiempo puede ser calculado por el MCM de t a y t b
. Dentro de este período de tiempo, pueden encontrarse en ciertos puntos que necesitan ser descubiertos. Observe que, después de encontrarse en el punto de partida, continúan encontrándose en el mismo punto.
El tiempo necesario para volver a encontrarnos en el punto de partida será, 
 

T1 = LCM(ta, tb) = LCM(d/a, d/b) = d/GCD(a, b)

Que se encuentren N veces en el período de tiempo T 1
Entonces, el retraso de tiempo entre sus encuentros consecutivos es, digamos que T 2 se puede calcular como, 
 

T 2 = (T 1 / N).
Este tiempo se puede calcular calculando el tiempo que se tarda en reunirse por primera vez después de que comiencen. 
Entonces, el tiempo que tardaron en encontrarse por primera vez, 
Por lo tanto, T 2 = (d / (a ​​– b)).
Dividiendo T 1 por T 2 , obtenemos, 
N = (T 1 / T 2 ) = ((a – b) / MCD(a, b)) 
 

A continuación se muestra la implementación del enfoque anterior: 
 

C++

// CPP Program to find number of distinct point of meet on a circular road
#include <bits/stdc++.h>
using namespace std;
 
// Returns the GCD of two number.
int gcd(int a, int b)
{
    int c = a % b;
    while (c != 0) {
        a = b;
        b = c;
        c = a % b;
    }
    return b;
}
 
// Returns the number of distinct meeting points.
int numberOfmeet(int a, int b)
{
    int ans;
 
    // Find the relative speed.
    if (a > b)
        ans = a - b;
    else
        ans = b - a;
 
    // convert the negative value to positive.
    if (a < 0)
        a = a * (-1);
 
    if (b < 0)
        b = b * (-1);
 
    return ans / gcd(a, b);
}
 
// Driver Code
int main()
{
    int a = 1, b = -1;
 
    cout << numberOfmeet(a, b) << endl;
    return 0;
}

Java

// Java Program to find number
// of distinct point of meet
// on a circular road
import java.io.*;
 
class GFG
{
     
// Returns the GCD
// of two number.
static int gcd(int a, int b)
{
    int c = a % b;
    while (c != 0)
    {
        a = b;
        b = c;
        c = a % b;
    }
    return b;
}
 
// Returns the number of
// distinct meeting points.
static int numberOfmeet(int a,
                        int b)
{
    int ans;
 
    // Find the relative speed.
    if (a > b)
        ans = a - b;
    else
        ans = b - a;
 
    // convert the negative
    // value to positive.
    if (a < 0)
        a = a * (-1);
 
    if (b < 0)
        b = b * (-1);
 
    return ans / gcd(a, b);
}
 
// Driver Code
public static void main (String[] args)
{
    int a = 1, b = -1;
    System.out.println(numberOfmeet(a, b));
}
}
 
// This code is contributed by @ajit

Python3

# Python3 Program to find
# number of distinct point
# of meet on a circular road
import math
 
# Returns the number of
# distinct meeting points.
def numberOfmeet(a, b):
    ans = 0;
     
    # Find the relative speed.
    if (a > b):
        ans = a - b;
    else:
        ans = b - a;
         
    # convert the negative
    # value to positive.
    if (a < 0):
        a = a * (-1);
    if (b < 0):
        b = b * (-1);
    return int(ans / math.gcd(a, b));
 
# Driver Code
a = 1;
b = -1;
print(numberOfmeet(a, b));
 
# This code is contributed by mits

C#

// C# Program to find number
// of distinct point of meet
// on a circular road
using System;
 
class GFG
{
 
// Returns the GCD
// of two number.
static int gcd(int a, int b)
{
    int c = a % b;
    while (c != 0)
    {
        a = b;
        b = c;
        c = a % b;
    }
    return b;
}
 
// Returns the number of
// distinct meeting points.
static int numberOfmeet(int a,
                        int b)
{
    int ans;
 
    // Find the relative speed.
    if (a > b)
        ans = a - b;
    else
        ans = b - a;
 
    // convert the negative
    // value to positive.
    if (a < 0)
        a = a * (-1);
 
    if (b < 0)
        b = b * (-1);
 
    return ans / gcd(a, b);
}
 
// Driver Code
static public void Main ()
{
    int a = 1, b = -1;
    Console.WriteLine(
            numberOfmeet(a, b));
}
}
 
// This code is contributed
// by @ajit

PHP

<?php
// PHP Program to find number
// of distinct point of meet
// on a circular road
 
// Returns the GCD of two number.
function gcd($a, $b)
{
    $c = $a % $b;
    while ($c != 0)
    {
        $a = $b;
        $b = $c;
        $c = $a % $b;
    }
    return $b;
}
 
// Returns the number of
// distinct meeting points.
function numberOfmeet($a, $b)
{
    $ans;
 
    // Find the relative speed.
    if ($a > $b)
        $ans = $a - $b;
    else
        $ans = $b - $a;
 
    // convert the negative
    // value to positive.
    if ($a < 0)
        $a = $a * (-1);
 
    if ($b < 0)
        $b = $b * (-1);
 
    return $ans / gcd($a, $b);
}
 
// Driver Code
$a = 1;
$b = -1;
 
echo numberOfmeet($a, $b)."\n";
     
// This code is contributed by mits
?>

Javascript

<script>
 
// Javascript Program to find number of distinct
// point of meet on a circular road
 
// Returns the GCD of two number.
function gcd(a, b)
{
    var c = a % b;
    while (c != 0) {
        a = b;
        b = c;
        c = a % b;
    }
    return b;
}
 
// Returns the number of distinct meeting points.
function numberOfmeet(a, b)
{
    var ans;
 
    // Find the relative speed.
    if (a > b)
        ans = a - b;
    else
        ans = b - a;
 
    // convert the negative value to positive.
    if (a < 0)
        a = a * (-1);
 
    if (b < 0)
        b = b * (-1);
 
    return ans / gcd(a, b);
}
 
// Driver Code
var a = 1, b = -1;
document.write( numberOfmeet(a, b));
 
 
</script>

Producción:  

2

Publicación traducida automáticamente

Artículo escrito por anuj0503 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *