Задача зубчатая передача

Рейтинг: 6Ответов: 1Опубликовано: 07.11.2014

Зубчатая передача состоит из 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 (чтобы узнать число оборотов первой шестерни).