Advertisement
artur99

C++ sort by digit sum

May 10th, 2018
195
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.03 KB | None | 0 0
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. int sum(int n){
  5.     int sum = 0;
  6.     while(n){
  7.         sum+=n%10;
  8.         n/=10;
  9.     }
  10.     return sum;
  11. }
  12.  
  13. bool compare(int a, int b){
  14.     int sa = sum(a), sb = sum(b);
  15.     if(sa < sb)
  16.         return true; //sortat ok
  17.     if(sa > sb)
  18.         return false; //sortat invers
  19.        
  20.     // A rămas cazul în care au sumele egale, verificăm numărul efectiv
  21.     if(a <= b)
  22.         return true; // E ok
  23.     return false; // Greșit
  24. }
  25.  
  26. int main(){
  27.     int n, i, j, aux;
  28.     cin>>n;
  29.     short int v[n];
  30.     for(i = 0; i < n; i++){
  31.         cin>>v[i];
  32.     }
  33.     int changes = 0;
  34.     do{
  35.         for(i = 0; i < n; i++){
  36.             for(j = i+1; j < n; j++){
  37.                 if(compare(v[i], v[j]) == false){
  38.                     aux = v[i];
  39.                     v[i] = v[j];
  40.                     v[j] = aux;
  41.                     changes++;
  42.                 }
  43.             }
  44.         }
  45.     }while(changes == 0);
  46.  
  47.     for (int i = 0; i < n; i++) {
  48.         cout<<v[i]<<" ";
  49.     }
  50. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement