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:
#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