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.