Рубрики

Проверьте, возможно ли перейти от заданной координаты к желаемой.

Даны две координаты (x, y) и (a, b). Найдите, можно ли достичь (x, y) из (a, b).

Только возможные перемещения из любой координаты (i, j)

  • (ij, j)
  • (я, ij)
  • (я + J, J)
  • (я, я + я)

Даны x, y, a, b и могут быть отрицательными.

Примеры:

Input : (x, y) = (1, 1) and  (a, b) = (2, 3).
Output : Yes.
(1, 1) -> (2, 1) -> (2, 3).

Input : (x, y) = (2, 1) and  (a, b) = (2, 3).
Output : Yes.

Input : (x, y) = (35, 15) and  (a, b) = (20, 25).
Output : Yes.
(35, 15) -> (20, 15) -> (5, 15) -> (5, 10) -> (5, 5) ->
(10, 5) -> (15, 5) -> (20, 5) -> (20, 25)

Если мы внимательнее посмотрим на проблему, мы можем заметить, что ходы являются аналогичными шагами евклидова алгоритма для поиска GCD . Таким образом, координату (a, b) можно получить из (x, y), только если GCD для x, y равна GCD для a, b. В противном случае это невозможно.

Пусть GCD из (x, y) будет gcd. Из (x, y) мы можем достичь (gcd, gcd) и с этой точки мы можем достичь (a, b) тогда и только тогда, когда GCD из «a» и «b» также является gcd.

Ниже приведена реализация этого подхода:

C / C ++

// C ++ программа для проверки возможности достижения
// (a, b) из (x, y).
#include <bits/stdc++.h>

using namespace std;

  
// Возвращает GCD для i и j

int gcd(int i, int j)

{

    if (i == j)

        return i;

  

    if (i > j)

        return gcd(i - j, j);

    return gcd(i, j - i);

}

  
// Возвращает true, если возможно перейти к (a, b)
// из (х, у)

bool ispossible(int x, int y, int a, int b)

{

    // Находим абсолютные значения всех, поскольку знак не

    // иметь значение.

    x = abs(x), y = abs(y), a = abs(a), b = abs(b);

  

    // Если gcd равен, то можно достичь.

    // Остальное невозможно.

    return (gcd(x, y) == gcd(a, b));

}

  
// Управляемая программа

int main()

{

    // Преобразование координаты в положительное целое число

    int x = 35, y = 15;

    int a = 20, b = 25;

    (ispossible(x, y, a, b)) ? (cout << "Yes") : (cout << "No");

    return 0;

}

Джава

// Java-программа для проверки, если это возможно
// достичь (a, b) из (x, y).

class GFG {

  

    // Возвращает GCD для i и j

    static int gcd(int i, int j)

    {

        if (i == j)

            return i;

  

        if (i > j)

            return gcd(i - j, j);

        return gcd(i, j - i);

    }

  

    // Возвращает true, если возможно перейти к (a, b)

    // из (х, у)

    static boolean ispossible(int x, int y, int a, int b)

    {

  

        // Находим абсолютные значения всех как

        // знак не имеет значения.

        x = Math.abs(x);

        y = Math.abs(y);

        a = Math.abs(a);

        b = Math.abs(b);

  

        // Если gcd равен, то можно достичь.

        // Остальное невозможно.

        return (gcd(x, y) == gcd(a, b));

    }

  

    // Код драйвера

    public static void main(String[] args)

    {

  

        // Преобразование координаты в положительное целое число

        int x = 35, y = 15;

        int a = 20, b = 25;

        if (ispossible(x, y, a, b))

            System.out.print("Yes");

        else

            System.out.print("No");

    }

}
// Этот код предоставлен Anant Agarwal.

питон

# Программа Python, чтобы проверить, можно ли достичь
# (a, b) из (x, y).
# Возвращает GCD для i и j

def gcd(i, j):

    if (i == j):

        return i

   

    if (i > j):

        return gcd(i - j, j)

    return gcd(i, j - i)

   
# Возвращает true, если возможно перейти к (a, b)
# от (х, у)

def ispossible(x, y, a, b):

    # Найти абсолютные значения всех, поскольку знак не

    # иметь значение.

    x, y, a, b = abs(x), abs(y), abs(a), abs(b)

   

    # Если gcd равен, то можно достичь.

    # Иначе не возможно.

    return (gcd(x, y) == gcd(a, b))

   
# Управляемая программа

    # Преобразование координаты в положительное целое число

x, y = 35, 15

a, b = 20, 25

if(ispossible(x, y, a, b)):

    print "Yes"

else:

    print "No"

# Предоставлено Афзалом Ансари

C #

// C # программа для проверки, если это возможно
// достичь (a, b) из (x, y).

using System;

  

class GFG {

  

    // Возвращает GCD для i и j

    static int gcd(int i, int j)

    {

        if (i == j)

            return i;

  

        if (i > j)

            return gcd(i - j, j);

        return gcd(i, j - i);

    }

  

    // Возвращает true, если это возможно

    // перейти к (a, b) из (x, y)

    static bool ispossible(int x, int y,

                           int a, int b)

    {

  

        // Находим абсолютные значения всех как

        // знак не имеет значения.

        x = Math.Abs(x);

        y = Math.Abs(y);

        a = Math.Abs(a);

        b = Math.Abs(b);

  

        // Если gcd равен, то возможно

        // достигнуть. Остальное не возможно.

        return (gcd(x, y) == gcd(a, b));

    }

  

    // Код драйвера

    public static void Main()

    {

  

        // Преобразование координаты

        // в положительное целое число

        int x = 35, y = 15;

        int a = 20, b = 25;

          

        if (ispossible(x, y, a, b))

            Console.Write("Yes");

        else

            Console.Write("No");

    }

}

  
// Этот код предоставлен нитин митталь.

PHP

<?php
// PHP программа для проверки
// можно достичь
// (a, b) из (x, y).

  
// Возвращает GCD для i и j

function gcd($i, $j)

{

    if ($i == $j)

        return $i;

  

    if ($i > $j)

        return gcd($i - $j, $j);

    return gcd($i, $j - $i);

}

  
// Возвращает true, если это
// можно перейти к (а, б)
// из (х, у)

function ispossible($x, $y, $a, $b)

{

      

    // Находим абсолютные значения

    // всего как знак не

    // иметь значение.

    $x = abs($x); 

    $y = abs($y);

    $a = abs($a);

    $b = abs($b);

  

    // Если gcd равен, то

    // можно достичь.

    // Остальное невозможно.

    return (gcd($x, $y) == gcd($a, $b));

}

  
// Код драйвера
{

      

    // Преобразование координаты

    // в положительное целое число

    $x = 35; $y = 15;

    $a = 20; $b = 25;

    if (ispossible($x, $y, $a, $b)) 

        echo( "Yes");

    else

        echo( "No");

    return 0;

}

  
// Этот код предоставлен нитин митталь.
?>


Выход:

Yes

Эта статья предоставлена Anuj Chauhan (anuj0503) . Если вы как GeeksforGeeks и хотели бы внести свой вклад, вы также можете написать статью с помощью contribute.geeksforgeeks.org или по почте статьи contribute@geeksforgeeks.org. Смотрите свою статью, появляющуюся на главной странице GeeksforGeeks, и помогите другим вундеркиндам.

Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.

Рекомендуемые посты:

Проверьте, возможно ли перейти от заданной координаты к желаемой.

0.00 (0%) 0 votes