Documente Academic
Documente Profesional
Documente Cultură
#130
Se dă un vector cu n elemente numere întregi. 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.
sortcif.in
6
89 22 91 4005 51 721
sortcif.out
22 51 4005 91 721 89
#include <iostream>
#include <fstream>
ifstream fin("sortcif.in");
ofstream fout("sortcif.out");
int main()
fin >> n;
s1=0;
do{
s1=s1+x%10;
x/=10;
} while(x!=0);
s[i]=s1;
swap(s[i],s[j]);
swap(v[i],v[j]);
Cerinţa
Să se ordoneze crescător elementele unui vector crescător după prima cifră.
Date de intrare
Fişierul de intrare sortcif2.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 sortcif2.out va conţine pe prima linie cele n elemente ale vectorului, ordonate
conform cerinței, separate printr-un spațiu.
sortcif2.in
6
89 2246 91 4005 51 721
sortcif2.out
#include <iostream>
#include <fstream>
ifstream fin("sortcif2.in");
ofstream fout("sortcif2.out");
int n;
int main()
fin >> n;
x=v[i];
while(x>9)
x/=10;
swap(s[i],s[j]);
swap(v[i],v[j]);
Date de intrare
Fișierul de intrare sortare_divizori.in conține pe prima linie numărul n, iar pe a doua
linie n numere naturale nenule separate prin câte un spațiu.
Date de ieșire
Fișierul de ieșire sortare_divizori.out va conține cele n numere aflate pe a doua linie a
fișierului de intrare ordonate descrescător după numărul de divizori.
Obs: dacă există mai multe numere care au același număr de divizori, acestea vor fi
ordonate crescător
sortare_divizori.in
5
12 20 4 100 13
sortare_divizori.out
100 12 20 4 13
Explicație
12 are 6 divizori, 20 are 6 divizori, 4 are 3 divizori, 100 are 9 divizori, 13 are 2 divizori, 12 și
20 au același număr de divizori. Așadar ordinea va fi 100 12 20 4 13.
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
ifstream fin("sortare_divizori.in");
ofstream fout("sortare_divizori.out");
int v[1001],p,i,n,x,a[1001],b[1001],nr_div,j,d;
int main()
fin>>n;
fin>>a[i];
x=a[i];
d=2; //folosesc alg eficient de desc in factori primi pentru a nu avea limita de timp depasita
nr_div=1;
while(d*d<=x)
p=0;
while (x%d==0)
p++;
x=x/d;
if(p!=0)
nr_div=nr_div*(p+1);
d++;
if(x!=1)
nr_div=nr_div*(1+1);
for (i=1; i<=n-1; i++) //ordonez desc vect b, inversand cand este cazul simultan si elementele din vect a
for(j=i+1; j<=n; j++)
if(b[i]<b[j])
swap(b[i],b[j]);
swap(a[i],a[j]);
else
if(a[i]>a[j])
swap(a[i],a[j]);
fout<<a[i]<<" ";
return 0;
x=a[i];
nr_div=0;
for(d=1;d*d<x;d++)
if(x%d==0)
nr_div=nr_div+2;
if(d*d==x)
nr_div=nr_div+1;