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

Buna!
Ma poate ajuta cineva cu aceasta problema?

Cerința
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.

Date de intrare
Programul citește de la tastatură numărul n, iar apoi n numere naturale.

Date de ieșire
Programul va afișa pe ecran cele n numere în ordinea cerută.

Restricții și precizări
1 ≤ n ≤ 1000
cele n numere citite vor fi mai mici decât 100.000.000

Exemplu
Intrare

10
24 46 11 36 48 35 27 28 49 6
Ieșire

6 11 27 35 28 49 24 46 36 48


boiustef: da, se poate, dar de ce nu se poate ca din start sa scrii ca problema e de pe pbinfo si ce nume sau numar are?

Răspunsuri la întrebare

Răspuns de boiustef
9

#include <iostream>

using namespace std;

long long n, i, v[1001],sdiv[1001], d, s, num, j, schimb=1;

int main()

{

   cin >> n;

   for (i=1; i<=n; ++i)

   {

       cin >> v[i];

       num=v[i];

       s=0;

       for (d=1; d*d<=num; ++d)

       {

           if (num%d==0)

           {

               s=s+d;

               if (d*d!=num) s=s+num/d;

           }

       }

       sdiv[i]=s;

   }

   for (i=1; i<n; ++i)

   {

       for (j=i+1; j<=n; ++j)

       {

           if (sdiv[j]<sdiv[i])

           {

               swap(sdiv[i], sdiv[j]);

               swap(v[i], v[j]);

           }

       }

   }

   while (schimb==1)

   {

       schimb=0;

       for (i=1; i<n; ++i)

       {

           if (sdiv[i]==sdiv[i+1] && v[i]>v[i+1]) { swap(v[i], v[i+1]); schimb=1; }

       }

   }

   for (i=1; i<=n; ++i)

       cout << v[i] << " ";

}

Alte întrebări interesante