Рубрики

Проблема подсчета флип-таймера песка

Даны два целых числа A и B, представляющие время, затраченное двумя разными таймерами Sand, чтобы опустеть. Задача состоит в том, чтобы найти количество смещений каждого таймера до момента, когда оба таймера Песка опустеют одновременно.

Примеры:

Input: A = 30, B = 15
Output: 0 1
After 15 minutes: 15 0
Flip timer 2: 15 15
After another 15 minutes: 0 0

Input: A = 10, B = 8
Output: 3 4

Подход: наименьший общий коэффициент (LCM) из двух чисел будет определять время, когда оба таймера Песка опустеют вместе.
LCM (A, B) = (A * B) / GCD (A, B)
Разделив LCM на вход, вы получите количество переворотов для каждого таймера песка соответственно.

C ++

// C ++ 14 реализация подхода
#include<bits/stdc++.h>

using namespace std;

  
// Рекурсивная функция для возврата
// жкд а и б

int gcd(int a, int b){

    // Все делит 0

    if (b == 0)

        return a;

    return gcd(b, a % b);

}

  
// Функция для вывода номера
// переворачивает оба таймера песка

void flip(int a,int b){

    int lcm =(a * b)/gcd(a, b);

    a = lcm/a;

    b = lcm/b;

    cout<<a-1<<" "<<b-1;

}

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

int main(){

  

int a = 10;

int b = 5;

flip(a, b);

  
}

Джава

// Java реализация подхода

class GFG 

{

  
// Рекурсивная функция для возврата
// жкд а и б

static int gcd(int a, int b)

{

    // Все делит 0

    if (b == 0)

        return a;

    return gcd(b, a % b);

}

  
// Функция для вывода номера
// переворачивает оба таймера песка

static void flip(int a, int b)

{

    int lcm = (a * b) / gcd(a, b);

    a = lcm / a;

    b = lcm / b;

    System.out.print((a - 1) + " " + (b - 1));

}

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

public static void main(String[] args) 

{

    int a = 10;

    int b = 5;

    flip(a, b);

}

  
// Этот код предоставлен 29AjayKumar

python3

# Python3 реализация подхода

  
# Рекурсивная функция для возврата
# жк а и б

def gcd(a, b): 

      

    # Все делит 0

    if (b == 0): 

        return

    return gcd(b, a % b) 

  
# Функция для печати номера
# сальто для обоих таймеров песка

def flip(a, b):

    lcm = (a * b) // gcd(a, b)

    a = lcm // a

    b = lcm // b

    print(a - 1, b - 1)

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

a = 10

b = 5

flip(a, b)

  
# Этот код предоставлен Мохитом Кумаром

C #

// C # реализация подхода

using System;

  

class GFG

{

      

    // Рекурсивная функция для возврата

    // жкд а и б

    static int gcd(int a, int b)

    {

        // Все делит 0

        if (b == 0)

        return a;

          

        return gcd(b, a % b);

    }

      

    // Функция для вывода номера

    // переворачивает оба таймера песка

    static void flip(int a, int b)

    {

        int lcm = (a * b) / gcd(a, b);

        a = lcm / a;

        b = lcm / b ;

        Console.WriteLine((a - 1) + " " +

                          (b - 1));

    }

      

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

    public static void Main()

    {

        int a = 10;

        int b = 5;

        flip(a, b);

    }

}

  
// Этот код предоставлен AnkitRai01

Выход:

0 1

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

Проблема подсчета флип-таймера песка

0.00 (0%) 0 votes