Cerința
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
Exemplu
sortare_divizori.in
5 12 20 4 100 13
sortare_divizori.out
100 12 20 4 13
Explicație
12
are 6
divizori, 20
are 6
divizori, 4
are 3
divizori, 100
are 9
divizori, 13
are 2
divizori, 12
și 20
au același număr de divizori. Așadar ordinea va fi 100 12 20 4 13
.
Cum e corect?
cout < "As la info";
cout << "As la info";
cout >> "As la info";
Felicitări! Poți mai mult?
Avem sute de probleme pentru tine, fiecare cu explicații ușor de înțeles.
Greșit, dar nu-i bai!
Antrenează-te cu sutele de probleme pe care ți le-am pregătit. Îți explicăm fiecare problemă în parte.
Rezolvare
Iată rezolvarea de 100 de puncte pentru problema Sortare Divizori:
#include <fstream>
using namespace std;
ifstream fin("sortare_divizori.in");
ofstream fout("sortare_divizori.out");
int v[1000],div_v[1000],n;
int main()
{
int i,j;
fin>>n;
for(i=0;i<n;i++)
{
fin>>v[i];
int x=v[i];
int exp=0;
while(x%2==0)
{
exp++;
x/=2;
}
int nr_div=exp+1;
int d=3;
while(d*d<=x)
{
exp=0;
while(x%d==0)
{
exp++;
x/=d;
}
nr_div*=(exp+1);
d+=2;
}
if(x!=1)
nr_div*=2;
div_v[i]=nr_div;
}
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
if(div_v[i]<div_v[j])
{
swap(v[i], v[j]);
swap(div_v[i], div_v[j]);
}
else
if(div_v[i]==div_v[j])
if(v[i]>v[j])
swap(v[i], v[j]);
for(i=0;i<n;i++)
fout << v[i]<<' ';
return 0;
}
Atenție
Enunțurile afișate pe această pagină aparțin exclusiv site-ului PbInfo. Astfel, pentru ștergerea conținutului, puteți să ne contactați la adresa .
Rezolvarea problemei #1608 Sortare Divizori
Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #1608 Sortare Divizori de pe PbInfo.ro. Atenție: nu încurajăm copiatul codului! Totuși, credem cu tărie că analizarea unei soluții corecte este o metodă foarte ușoară de a învăța informatică, astfel că oferim sursele pentru peste 1500 de probleme de pe platforma PbInfo.ro.
Pentru rezolvări PbInfo de la peste 1500 de probleme, vă invităm să intrați pe site-ul nostru!