Informatică, întrebare adresată de paulaalinaall, 9 ani în urmă

Se dă un vector cu n elemente numere întregi.

Cerinţa
Să se ordoneze crescător elementele unui vector crescător după suma cifrelor.

Date de intrare
Fişierul de intrare sortcif.in conţine pe prima linie numărul n si pe a doua linie n numere întregi separate prin spaţii.

Date de ieşire
Fişierul de ieşire sortcif.out va conţine pe prima linie cele n elemente ale vectorului, ordonate conform cerinței, separate printr-un spațiu.

Restricţii şi precizări
0 < n ≤ 100
valoarea absolută a numerelor de pe a doua linie a fişierului de intrare va fi mai mică decât 2 30



Exemplu
sortcif.in

6
89 22 91 4005 51 721
sortcif.out

22 51 4005 91 721 89

Răspunsuri la întrebare

Răspuns de cristi4567
3
#include <iostream>
#include <fstream>using namespace std;int scif(int x)
{
    int s=0;
    while(x!=0)
    {
        s+=x%10;
        x/=10;
    }
    return s;
}int main()
{
    ifstream f1("sortcif.in");
    ofstream f2("sortcif.out");
    int v[100],n,i,x,ok;
    f1>>n;
    for(i=0; i<n; i++)
        f1>>v[i];
    do
    {
        ok=0;
        for(i=0; i<n-1; i++)
            if(scif(v[i])>scif(v[i+1]))
            {
                x=v[i];
                v[i]=v[i+1];
                v[i+1]=x;
                ok=1;
            }
    }
    while(ok==1);
    for(i=0; i<n; i++)
        f2<<v[i]<<" ";
    return 0;
}
//Sper ca te ajuta, daca e vreo parte unde nu ai inteles, sa imi spui.
Răspuns de AntiEaglesDavids
1
#include <fstream>
#include <algorithm>
using namespace std;
ifstream fin("sortcif.in");
ofstream fout("sortcif.out");

bool comp(int a, int b)
{
    int s1 = 0, s2 = 0;

    while(a || b) {
        s1 += a % 10; s2 += b % 10;
        a /= 10; b /= 10;
    }

    return s1 < s2;
}

int main()
{
    int v[105], n;

    fin >> n;
    for(int i = 1; i <= n; i++)
        fin >> v[i];
    sort(v + 1, v + n + 1, comp);
    for(int i = 1; i <= n; i++)
        fout << v[i] << ' ';
}



AntiEaglesDavids: sortare in O(nlogn)
Alte întrebări interesante