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ăspunsuri la întrebare
#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;
}