#алгоритм #pascal #freepascal
Зубчатая передача состоит из N шестерен, оси оборотов которых находятся на одной
прямой. На шестернях нанесены одинаковые метки, которые в начальном состоянии механизма
попарно совпадают.
Сколько оборотов сделает первая шестерня до того, когда метки на всех шестернях
совпадут?
Вводим число n - само количество шестерней, дальше через пробел N чисел, x1, x2,
xn количество зубов каждой шестеренки, вывести, через сколько оборотов метки совпадут.
Препод дал небольшой пример: Ввод 3 8 15 12 Вывод 15.
В общем, насколько я верно все понял, задача решается с помощью НОК, то есть надо
из введенных значений найти наименьшее число, которое будет, собственно, делится на
N, в примере это число 15. Как я описал функцию НОК:
Код Pascal
function Nod(a,b:integer):integer;
begin
while(a<>0) and (b<>0) do
if a>=b then a:= a mod b
else b:= b mod a;
NOD:=a+b;
end;
function NOK(a,b:integer):integer;
begin
NOK:=a*b div NOd(a,b)
end;
Но как именно осуществить проверку введенных чисел на НОК с первым? Думал сделать так:
if (NOK(n,x) < NOK(n,x1)) then Writeln(x);
Но вариантов таких может быть не 2 и не 3, поэтому тут как раз и стоит вопрос. Я
думаю, что алгоритм мой верный.
Ответы
Ответ 1
Попробуйте взять NOK от всех чисел x1, x2, …, xn (получится число зубцов, которое пройдёт до совпадения меток) и поделить результат на x1 (чтобы узнать число оборотов первой шестерни).
Комментариев нет:
Отправить комментарий