Informatică, întrebare adresată de andreutzakriss, 8 ani în urmă

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++


artur99: Se poate folosi quicksort și o funcție lambda sau ceva?
artur99: Sau sort-ul din algorithm?
artur99: Sau, măcar bubble sort? :D

Răspunsuri la întrebare

Răspuns de artur99
5

#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


andreutzakriss: ce face acel return sum sau return true, etc? afiseaza pe ecran?
artur99: Nu. return-ul trimite valoarea înapoi. Când se face compare(v[i], v[j]) == false, se verifică dacă s-a făcut return cu false.
artur99: N-ați făcut funcții?
andreutzakriss: nu..
andreutzakriss: sunt a 9-a
andreutzakriss: si de-abia sem asta am trecut la programare
Alte întrebări interesante