👤

Se citeste de la tastatura un vector cu n componente numere naturale, &ecare numar având cel mult 9 cifre. Se cere sa se scrie un program care realizeaza urmatoarele:

a. Împarte numerele din vector în grupe, toate numerele dintr-o grupa având aceeasi suma a cifrelor din care se compun.

b) Afiseaza grupele de numere obtinute la punctul a), în ordinea descrescatoare a sumei cifrelor numerelor care le compun, in cadrul grupei fiind afisate crescator dupa valoarea elementului.

Exemplu: x= (234, 134, 34, 8, 143, 141, 5, 23, 897, 996, 45) Suma cifrelor ar arata asa: xcif=(9, 8, 7, 8, 8, 6, 5, 5, 24, 24, 9)Afisare :a. Grupa 1: 234 45 (suma 9) Grupa 2 134 8 143 (suma 8) Grupa 3 34 (suma 7) Grupa 4 141 (suma 6) Grupa 5 5 23 (suma 5) Grupa 6 897 996 (suma 24) b. 897 996 45 234 8 134 143 34 141 5 23


Răspuns :

#include <iostream>

using namespace std;

int suma_cifrelor(int numar)

{

   /**

    * Functie care calculeaza suma cifrelor unui numar dat

    */

   int suma = 0;

   while(numar)

   {

       suma += numar % 10;

       numar /= 10;

   }

   return suma;

}

int main()

{

   int numar_de_elemente, elemente[10], suma[10] = {0};

   cin >> numar_de_elemente;

   for(int i = 0; i < numar_de_elemente; i++)

   {

       cin >> elemente[i];

       suma[i] = suma_cifrelor(elemente[i]);

   }

   for(int i = 0; i < numar_de_elemente; i++)

       for(int j = i + 1; j < numar_de_elemente; j++)

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

           {

               int aux = suma[i];

               suma[i] = suma[j];

               suma[j] = aux;

           }

   // Facem primul separat pentru a putea verifica daca am scris deja suma respectiva in viitor

   cout << "Suma " << suma[0] << " : ";

   for(int i = 0; i < numar_de_elemente; i++)

   {

       if(suma_cifrelor(elemente[i]) == suma[0])

       {

           cout << elemente[i] << " ";

       }

   }

   cout << endl;

   for(int index_suma = 1; index_suma < numar_de_elemente; index_suma++)

   {

       if(suma[index_suma] == suma[index_suma - 1])

           continue;

       bool scris = false;

       cout << "Suma " << suma[index_suma] << " : ";

       for(int index_element = 0; index_element < numar_de_elemente; index_element++)

       {

           if(suma_cifrelor(elemente[index_element]) == suma[index_suma])

           {

               cout << elemente[index_element] << " ";

               scris = true;

           }

       }

       if(scris)

           cout << endl;

   }

   return 0;

}