Informatică, întrebare adresată de tud0r2, 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
In C++ va rog!! Problema 130 pe pbinfo!! Multumesc

Răspunsuri la întrebare

Răspuns de Cactus
9
#include <iostream>
#include<fstream>
using namespace std;
int suma(int n)
{
    int s=0;
    while(n)
    {
        s=s+n%10;
        n=n/10;
    }
    return s;
}
ifstream f("sortcif.in");
ofstream g("sortcif.out");
int main()
{
    int n,x[100],i,j,aux;
    f>>n;
    for(i=1;i<=n;i++)
        f>>x[i];
    for(i=1;i<n;i++)
        for(j=i+1;j<=n;j++)
         if(suma(x[i])>suma(x[j]))
         {
             aux=x[i];
             x[i]=x[j];
             x[j]=aux;
         }
    for(i=1;i<=n;i++)
        g<<x[i]<<" ";

    f.close();
    g.close();
    return 0;
}

tud0r2: cum dau coroana?
Cactus: Trebuie ori sa mai raspunda cineva, ori daca e doar un raspuns sa treaca o perioada de timp... :D
tud0r2: ok multumesc f mult
Cactus: Cu placere!
Răspuns de stassahul
3
#include <bits/stdc++.h>

using namespace std;

ifstream fin("sortcif.in");
ofstream fout("sortcif.out");

int n,a[100];

int sumcif(int a);
bool SumCif(int i, int j) {return sumcif(i)<sumcif(j);}

int main()
{

    fin >> n;

    for(int i=0;i<n;i++)
        fin >> a[i];

    sort(a,a+n,SumCif);

    for(int i=0;i<n;i++)
        fout << a[i] << " ";

    return 0;

}

int sumcif(int a)
{
    int S=0;
    while(a!=0)
    {
        S+=a%10;
        a/=10;
    }
    return S;
}
Alte întrebări interesante