Страницы

Поиск по вопросам

среда, 18 декабря 2019 г.

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

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

Комментариев нет:

Отправить комментарий