Написать программу ** паскале.Дано n целых чисел. Найти среди них пару чисел, для которых...

0 голосов
33 просмотров

Написать программу на паскале.Дано n целых чисел. Найти среди них пару чисел, для которых наименьшее общее кратное имеет наименьшее значение.


Информатика (4.6k баллов) | 33 просмотров
Дано ответов: 2
0 голосов
Правильный ответ

Const
  m = 50;

function NOK(a, b: integer): integer;
var
  c: integer;
begin
  if a = b then NOK := a
  else begin
    c := a * b;
    repeat
      if a > b then a := a - b else b := b - a;  
    until a = b;
    NOK := c div a
  end
end;

var
  a: array[1..m] of integer;
  i, j, n, p, q, nk, mn: integer;

begin
  Randomize;
  Write('Введите количество элементов в массиве (2..50)- ');
  Readln(n);
  Writeln('Исходный массив');
  for i := 1 to n do
  begin
    a[i] := Random(100) + 1;
    Write(a[i], ' ')
  end;
  Writeln;
  p := a[i];
  q := a[2];
  mn := p * q;
  for i := 1 to n - 1 do
    for j := i + 1 to n do
    begin
      nk := NOK(a[i], a[j]);
      if (mn > nk) then
      begin
        p := a[i];
        q := a[j];
        mn := nk
      end
    end;
  Writeln('Пара: ', p, '-', q, ' НОК=', mn);
end.

Тестовое решение:
Введите количество элементов в массиве (2..50)- 20
Исходный массив
19 36 99 86 79 83 73 69 27 14 87 67 49 84 98 79 38 4 60 22
Пара: 14-4 НОК=28


(142k баллов)
0 голосов

Function NOK(a, b: integer): integer;
var
  c, d, e: integer;
begin
    c := a;
    d := b;
    while (d > 0) do
    begin
      c := c mod d;
      e := c;
      c := d;
      d := e;
    end;
    result := (a div c) * b;
end;

const
  n = 4;

var
  a: array [1..n] of integer;
  b: array [1..n*n] of integer;
  i, j, min_: integer;

begin
  writeln('Введите n целых чисел, только вот давайте без нулей, детсадовцы знают, что на 0 делить нельзя, плохо это');
  min_ := 2147483647;
  for i := 1 to n do
    readln(a[i]);
  for i := 1 to n do
    for j := 1 to n do
    begin
      if (i = j) then continue;
      b[i + n * (j - 1)] := nok(a[i], a[j]);
      min_ := min(b[i + n * (j - 1)], min_);
    end;
  write('     ');
  for i := 1 to n do
    write(i:5);
  writeln();
  for i := 1 to n do
  begin
    write(i:5);
    for j := 1 to n do
      write(b[i + n * (j - 1)]:5);
    writeln();
  end;
  writeln('min: ', min_);
end.

(16.9k баллов)