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

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 ardyarde
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]<<" ";

}
Alte întrebări interesante