# PBinfo #515 – SortSD – Rezolvare C++

Sursa: Codul lui Andrei
Limbaj: C++
Autor rezolvare: deivid

## Enunț

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

## Cod sursă C++

```cpp
#include <iostream>
using namespace std;
int n, x[1005], s[1005];
int main(){
	cin >> n;
	for(int i = 0 ; i < n; ++i)
		cin >> x[i];
	for(int i = 0 ; i < n; ++i)
	{
		s[i] = 0;
		for(int d = 1 ; d * d <= x[i]; d ++)
			if (x[i] % d == 0)
			{
				s[i] += d;
				if(d * d < x[i])
					s[i] += x[i] / d;
			}
	}
	for(int i = 0 ; i < n - 1 ; i ++)
		for(int j = i + 1 ; j < n ; j ++)
			if(s[i] > s[j])
			{
				int aux = s[i];
				s[i] = s[j];
				s[j] = aux;
				aux = x[i];
				x[i] = x[j];
				x[j] = aux;
			}
			else
				if(s[i] == s[j])
					if(x[i]> x[j])
					{
						int aux = x[i];
						x[i] = x[j];
						x[j] = aux;
					}
	for(int i = 0 ; i < n ; i++)
		cout << x[i] << " ";
	return 0;
}
```

## Resurse

- [Pagina originală](https://codulluiandrei.ro/rezolvari/pbinfo/515)
- [Sursa C++](https://codulluiandrei.ro/rezolvari/pbinfo/515/cod.cpp)
- [Sursa pe GitHub](https://raw.githubusercontent.com/codulluiandrei/pbinfo/main/pbinfo-515/main.cpp)
- [Cursuri de informatică pentru BAC](https://codulluiandrei.ro/academia/info-curs/pachet-cpp/)
