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

Scrie un program care citind un șir de numere naturale afișează numerele citite ordonate crescător după suma cifrelor lor, iar dacă suma cifrelor este egală, descrescător după valoarea lor.

Am facut algoritmu asta si imi da 35 de puncte pe pbinfo:

#include < btis/stdc++.h >


using namespace std;

ifstream f("sortsum.in");

ofstream g("sortsum.out");

int n,s=0,x,i=0;

struct numar

{int val;

int sum;

} v[100001];

int main()

{

while(f>>x)

{

i=i+1; s=0;

v[i].val=x;

while(x!=0) { s=s+x%10; x=x/10; }

v[i].sum=s;

}

n=i;

for(int i=1;i v[j].sum) swap(v[i],v[j]);

if(v[i].sum==v[j].sum and v[i].val
}

for(int i=1;i<=n;i++)

g<
}

codul problemei este 3902(pbinfo)

Răspunsuri la întrebare

Răspuns de thePoint01
0

Răspuns:

#include <iostream>

#include <fstream>

using namespace std;

fstream f("sortsum.in");

ofstream f2("sortsum.out");

int sumcif(int n){

   if(n==0)

       return 0;

   else

       return sumcif(n/10)+n%10;

}

int main(){

   int n,v[101];

   f>>n;

   for(int i=1;i<=n;++i)

       f>>v[i];

   for(int i=1;i<n;++i){

       for(int j=i+1;j<=n;++i){

           if(sumcif(v[i])>sumcif(v[j])){

               swap(v[i],v[j]);

           }else{

               if(sumcif(v[i])==sumcif(v[j])){

                   if(v[i]<v[j]){

                       swap(v[i],v[j]);

                   }

               }

           }

       }

   }

   for(int i=1;i<=n;++i){

       f2<<v[i]<<" ";

   }

   f.close();

   f2.close();

   return 0;

}

Explicație:

am presupus ca pe prima linie a fisierului se afla n - numarul de elemente

Alte întrebări interesante