С клавиатуры вводится натуральное число n. Все числа от 1 до n включительно отсортируйте в порядке возрастания суммы делителей числа — Pascal(Паскаль)

uses crt;

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

function del(c: integer): integer;
var
  s: integer;
begin
  s := 0;
  for j := 1 to c do
    if c mod j = 0 then
      s := s + j;
  del := s;
end;

begin
  clrscr;
  writeln('vvedite n');
  readln(n);
  for i := 1 to n do
    a[i] := i;
  for i := 1 to n do
    b[i] := del(a[i]);
  for i := 1 to n do
    for j := i to n do
      if b[j] < b[i] then
      begin
        m := b[j];
        b[j] := b[i];
        b[i] := m;

        m := a[j];
        a[j] := a[i];
        a[i] := m;
      end;
  for i := 1 to n do
    write(a[i], ', ');
  writeln;
  readln;

end.

Следующий вариант

uses crt;

function SumDel(n: word): word;
var
  sum, i: word;
begin
  sum := 0;
  for i := 1 to n do
    if n mod i = 0 then
      sum := sum + i;
  SumDel := sum;
end;

var
  n, i, j, x: word;
  m: array [1 .. 200] of word;

begin
  clrscr;
  repeat
    write('Введите натуральное число до 200 n='); // больше 200 долго считает
    readln(n);
  until (n > 0) and (n <= 200);
  for i := 1 to n do
    m[i] := i;
  for i := 1 to n - 1 do
    for j := i + 1 to n do
      if SumDel(m[i]) > SumDel(m[j]) then
      begin
        x := m[i];
        m[i] := m[j];
        m[j] := x;
      end;
  writeln('Числа в порядке возрастания суммы делителей:');
  for i := 1 to n do
    write(m[i], ' ');
  readln

end.readln end.

Leave a Comment

8 + 2 =