Задача:
Монстр гонится за Риком и Морти на другой планете. Они настолько напуганы, что иногда кричат. Точнее, Рик кричит в моменты времени [latex]b,[/latex] [latex]b + a,[/latex] [latex]b + 2a,[/latex] [latex]b + 3a,[/latex]…, а Морти кричит в моменты времени [latex]d,[/latex] [latex]d + c,[/latex] [latex]d + 2c,[/latex] [latex]d + 3c,[/latex]….
Монстр поймает их, если в какой-то момент времени они закричат одновременно. Так что он хочет знать, когда он поймает их (первый момент времени, когда они закричат одновременно) или они никогда не закричат одновременно.
Ввод:
Первая строка входных данных содержит два целых числа [latex]a[/latex] и [latex]b[/latex] [latex](1\leq a,[/latex] [latex]b\leq 100).[/latex]
Вторая строка входных данных содержит два целых числа [latex]c[/latex] и [latex]d[/latex] [latex](1\leq c,[/latex] [latex]d\leq 100).[/latex]
Вывод:
Выведите первый момент времени, когда Рик и Морти закричат одновременно, или - 1, если они никогда не закричат одновременно.
Тесты:
Ввод
|
Вывод |
20 2 9 19 |
82 |
2 1 16 12 |
-1 |
Код:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
import java.util.*; public class RickAndMorty { public static void main(String[] args) { int n, m; Vector s = new Vector(); Scanner in = new Scanner(System.in); System.out.print("Введите a: "); int a = in.nextInt(); System.out.print("Введите b: "); int b = in.nextInt(); System.out.print("Введите c: "); int c = in.nextInt(); System.out.print("Введите d: "); int d = in.nextInt(); for(int i=0;i<=100;i++) { for(int j=0;j<=100;j++) { n=b+i*a; m=d+j*c; if(m==n) { s.add(n); } } } if(s.isEmpty()) { System.out.print(-1); } else System.out.print(s.firstElement()); } } |
Решение:
В этих моментах времени, заданных прогрессиями, изменяется только коэффициент при [latex]a[/latex] и [latex]c.[/latex] Создадим для них 2 цикла. Так как равных моментов времени может быть много, а нам нужен только первый, создаем вектор и ,когда моменты равны, добавляем в него этот момент. Затем, уже вне цикла, проверяем пустой ли вектор, и в таком случаем выводим -1, так как моменты на данном промежутке не были равны ни разу. Если же вектор непустой, выходим первый элемент вектора. Он и будет искомым первым одновременным криком.
Версия программы на Ideone.com