Informatică, întrebare adresată de blueandredcolours19, 8 ani în urmă

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 de cristiansecara2
0

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


blueandredcolours19: iar a doua
blueandredcolours19: #include

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]))
cristiansecara2: Ai încercat-o si pe cea care ți-am trimis-o?
blueandredcolours19: {
aux=v[i];
v[i]=v[j];
v[j]=aux;
}
for(i=1; i<=n; i++)
fout<
return 0;
}
blueandredcolours19: dap...am incercat o
blueandredcolours19: dar nu merge
blueandredcolours19: gataaaa
blueandredcolours19: thx
blueandredcolours19: :)))
cristiansecara2: cu plăcere
Alte întrebări interesante