Informatică, întrebare adresată de DrAgOsH11, 9 ani în urmă

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 stassahul
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.
Alte întrebări interesante