# PBinfo #4214 – DouaNumere – Rezolvare C++

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

## Enunț

Cerinţa
Scrieţi definiția completă a subprogramului C++ cu antetul:

int DouaNumere(int a[], int n)
care are doi parametri:  


a, prin care primeşte un tablou unidimensional de numere naturale
n, numărul efectiv de elemente ale tabloului

Subprogramul returnează suma maximă care poate fi obținută adunând două numere din a care au aceeași sumă a cifrelor. Dacă nu există două numere cu aceeași sumă a cifrelor, atunci funcția va returna -1.

Restricţii şi precizări

a[i] ≤ 1.000.000.000
2 ≤ n ≤ 100.000
elementele vectorului a sunt indexate de la 0
Puteți utiliza în rezolvare orice structură de date.

Exemplu:
Dacă n=5, a=(14,66,41,50,93), funcția va returna 159, suma maximă obținându-se din 66 și 93 care au aceeași sumă a cifrelor.

Important
Soluţia propusă va conţine doar definiţia subprogramului cerut. Prezenţa în soluţie a altor instrucţiuni poate duce erori de compilare sau de execuţie care vor avea ca efect depunctarea soluţiei.

## Cod sursă C++

```cpp
int DouaNumere(int A[], int n)
{
    int a[100], b[100];
    int s, k, i, x;
    for (i = 0; i < 100; i++)
        a[i] = b[i] = -1;
    for (i = 0; i < n; i++)
    {
        k = x = A[i];
        s = 0;
        while (x > 0)
        {
            s += x % 10;
            x /= 10;
        }
        if (a[s] == -1) a[s] = k;
        else
        {
            if (b[s] < k) b[s] = k;
            if (a[s] < b[s]) swap(a[s], b[s]);
        }
    }
    k = -1;
    for (i = 0; i < 100; i++)
        if (b[i] >= 0 && k < a[i] + b[i])
            k = a[i] + b[i];
    return k;
}
```

## Resurse

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