Se dau n numere naturale nenule. Ordonați descrescător cele n numere după numărul lor de divizori.
Date de intrare
Fișierul de intrare sortare_divizori.in conține pe prima linie numărul n, iar pe a doua linie n numere naturale nenule separate prin câte un spațiu.
Date de ieșire
Fișierul de ieșire sortare_divizori.out va conține cele n numere aflate pe a doua linie a fișierului de intrare ordonate descrescător după numărul de divizori.
Restricții și precizări
1 ≤ n ≤ 1000
numerele de pe a doua linie a fișierului de intrare vor fi mai mici decât 1.000.000.000
dacă există mai multe numere care au același număr de divizori, acestea vor fi ordonate crescător
Răspunsuri la întrebare
Răspuns de
2
function f(a:integer):integer;
var i:integer;
begin
for i:=1 to a do
if (a mod i = 0) then
f+=1;
end;
var
a,b,c:array of integer;
i,n,maxd,max,min,l:integer;
t:text;
begin
assign(t,'sortare_divizori.in');
reset(t);
readln(t,n);
setlength(a,n);
setlength(b,n);
setlength(c,n);
for i:=0 to n-1 do
read(t,a[i]);
close(t);
min:=a[1];
max:=a[2];
for i:=0 to n-1 do
begin
if a[i]<min then min:=a[i];
if a[i]>max then max:=a[i];
end;
l:=0;
for min:=min to max do
for i:=0 to n-1 do
if a[i]=min then
begin
c[l]:=min;
inc(l);
end;
assign(t,'sortare_divizori.out');
rewrite(t);
for i:=0 to n-1 do
b[i]:=f(c[i]);
maxd:=b[1];
for i:=0 to n-1 do
if b[i]>maxd then maxd:=b[i];
for maxd:=maxd downto 0 do
for i:=0 to n-1 do
begin
if b[i]=maxd then write(t,c[i],' ');
end;
close(t);
end.
var i:integer;
begin
for i:=1 to a do
if (a mod i = 0) then
f+=1;
end;
var
a,b,c:array of integer;
i,n,maxd,max,min,l:integer;
t:text;
begin
assign(t,'sortare_divizori.in');
reset(t);
readln(t,n);
setlength(a,n);
setlength(b,n);
setlength(c,n);
for i:=0 to n-1 do
read(t,a[i]);
close(t);
min:=a[1];
max:=a[2];
for i:=0 to n-1 do
begin
if a[i]<min then min:=a[i];
if a[i]>max then max:=a[i];
end;
l:=0;
for min:=min to max do
for i:=0 to n-1 do
if a[i]=min then
begin
c[l]:=min;
inc(l);
end;
assign(t,'sortare_divizori.out');
rewrite(t);
for i:=0 to n-1 do
b[i]:=f(c[i]);
maxd:=b[1];
for i:=0 to n-1 do
if b[i]>maxd then maxd:=b[i];
for maxd:=maxd downto 0 do
for i:=0 to n-1 do
begin
if b[i]=maxd then write(t,c[i],' ');
end;
close(t);
end.
Alte întrebări interesante
Istorie,
8 ani în urmă
Limba română,
9 ani în urmă
Matematică,
9 ani în urmă
Limba română,
9 ani în urmă