Se dau n numere naturale. Afișați aceste numere ordonate crescător după suma divizorilor. Dacă două numere au aceeași sumă a divizorilor, se va afișa mai întâi cel mai mic.
Răspunsuri la întrebare
Răspuns de
1
#include <iostream>
using namespace std;
int suma(int nr)
{
int d=0,i;
for(i=1;i<=nr;i++)
if(nr%i==0)
d+=i;
return d;
}
int main()
{
int n,i,schimbat,aux;
cin>>n;
int v[n];
int v2[n];
for(i=0;i<n;i++)
{
cin>>v[i];
v2[i]=suma(v[i]);
}
do{
schimbat=0;
for(i=0;i<n-1;i++)
{
if (v2[i]>v2[i+1])
{
aux=v2[i];
v2[i]=v2[i+1];
v2[i+1]=aux;
aux=v[i];
v[i]=v[i+1];
v[i+1]=aux;
}
if (v2[i]==v2[i+1])
if(v2[i]>v2[i+1])
{
aux=v2[i];
v2[i]=v2[i+1];
v2[i+1]=aux;
aux=v[i];
v[i]=v[i+1];
v[i+1]=aux;
}
}
}while(schimbat);
for(i=0;i<n;i++)
cout<<v[i]<<" ";
}
using namespace std;
int suma(int nr)
{
int d=0,i;
for(i=1;i<=nr;i++)
if(nr%i==0)
d+=i;
return d;
}
int main()
{
int n,i,schimbat,aux;
cin>>n;
int v[n];
int v2[n];
for(i=0;i<n;i++)
{
cin>>v[i];
v2[i]=suma(v[i]);
}
do{
schimbat=0;
for(i=0;i<n-1;i++)
{
if (v2[i]>v2[i+1])
{
aux=v2[i];
v2[i]=v2[i+1];
v2[i+1]=aux;
aux=v[i];
v[i]=v[i+1];
v[i+1]=aux;
}
if (v2[i]==v2[i+1])
if(v2[i]>v2[i+1])
{
aux=v2[i];
v2[i]=v2[i+1];
v2[i+1]=aux;
aux=v[i];
v[i]=v[i+1];
v[i+1]=aux;
}
}
}while(schimbat);
for(i=0;i<n;i++)
cout<<v[i]<<" ";
}
Alte întrebări interesante
Limba română,
8 ani în urmă
Studii sociale,
8 ani în urmă
Matematică,
8 ani în urmă
Matematică,
9 ani în urmă
Matematică,
9 ani în urmă
Limba română,
9 ani în urmă
Limba română,
9 ani în urmă