#алгоритм #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 (чтобы узнать число оборотов первой шестерни).
Комментариев нет:
Отправить комментарий