Scrieti un program care citeste un numar natural nenul (n<100) si un sir de n numere naturale nenule cu cel mult 4 cifre fiecare, apoi afiseaza pe ecran sirul ordonat crescator in functie de suma cifrelor corespunzatoare fiecarui termen al sau. Daca doua numere au aceeasi suma a cifrelor, se va afisa mai intai cel mai mic dintre ele.
exemplu: n=5 v=(701,1000,44,99,143)
ordonat: v=(1000,44,143,701,99)
C++
Răspunsuri la întrebare
#include <iostream>
using namespace std;
int sum(int n){
int sum = 0;
while(n){
sum+=n%10;
n/=10;
}
return sum;
}
bool compare(int a, int b){
int sa = sum(a), sb = sum(b);
if(sa < sb)
return true; // Sortat ok
if(sa > sb)
return false; // Sortat invers
// A rămas cazul în care au sumele egale, verificăm numărul efectiv
if(a <= b)
return true; // E ok
return false; // Greșit
}
int main(){
int n, i, j, aux;
cin>>n;
short int v[n];
for(i = 0; i < n; i++){
cin>>v[i];
}
int changes;
do{
changes = 0;
for(i = 0; i < n; i++){
for(j = i+1; j < n; j++){
if(compare(v[i], v[j]) == false){
aux = v[i];
v[i] = v[j];
v[j] = aux;
changes++;
}
}
}
}while(changes == 0);
for (int i = 0; i < n; i++) {
cout<<v[i]<<" ";
}
}
https://pastebin.com/k0c0f9jx