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
Răspunsuri la întrebare
Răspuns:
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;
}
Explicație:
Nu sunt sigur de rezolvare, poate nu e cum faci tu la liceu sper doar sa te fi ajutat putin
using namespace std;
ifstream fin("sortare_divizori.in");
ofstream fout("sortare_divizori.out");
int main()
{
int i,n,d,k=0,aux,b=0,j;
fin >> n;
int v[n],a[n];
for(i=1; i<=n; i++)
{
k=0;
fin >> v[i];
for(d=1; d<=v[i]; d++)
if(v[i]%d==0)
k++;
b++;
a[b]=k;
}
for(i=1; i for(j=i+1; j<=b; j++)
if((a[i]v[j]))
aux=v[i];
v[i]=v[j];
v[j]=aux;
}
for(i=1; i<=n; i++)
fout<
return 0;
}