Cerința
Se dau n
numere naturale. Se cer următoarele:
a) Determinați cel mai mare dintre numerele date care are suma cifrelor minimă.
b) Aflați cel mai mic număr dintre numerele date care are în scrierea sa un număr maxim de cifre consecutive (de exemplu 25613 are în scrierea sa un număr maxim de 3 cifre consecutive:1,2,3).
c) Aflați cifra comună cât mai multor numere din șir. Dacă sunt mai multe asemenea cifre se vor afișa toate în ordine crescătoare.
Date de intrare
Fișierul de intrare cifre11.in
conține pe prima linie numărul n
, iar pe a doua linie n
numere naturale separate prin spații.
Date de ieșire
Fișierul de ieșire cifre11.out
va conține pe prima linie cel mai mare număr din șir cu suma cifrelor minimă, pe a doua linie cel mai mic număr cu număr maxim de cifre consecutive în scrierea sa, iar pe a treia linie cifrele ce apar în scrierea a cât mai multor numere din șir, separate prin spațiu .
Restricții și precizări
1 ≤ n ≤ 10000
- numerele de pe a doua linie a fișierului de intrare vor fi mai mici decât
2.000.000.000
- cele 3 cerințe vor primi punctaje astfel: a) 40% b) 30% c) 30%.
Exemplu
cifre11.in
5 23 1047 531 100013 8729
cifre11.out
100013 8279 1 3
Explicație
Două numere au suma cifrelor 5 (minimă) iar cel mai mare dintre ele este 100013. Numărul 8729 are în scrierea sa 3 cifre consecutive:7,8,9. Cifrele 1 și 3 apar fiecare în scrierea a 3 numere.
#include <bits/stdc++.h> #include<algorithm> using namespace std; ofstream cout("cifre11.out"); ifstream cin("cifre11.in"); struct cifra { int nr,s,nrc; };cifra S[10001]; int comp(cifra a , cifra b){return a.s < b.s || (a.s == b.s && a.nr > b.nr);} int cmp(cifra a , cifra b){return a.nrc > b.nrc || (a.nrc == b.nrc && a.nr < b.nr);} int n , f[10001] , q[10001]; int main() { cin >> n; for(int i = 1 ; i <= n ; i++) { cin >> S[i].nr; int g[10001] = {0}; int aux = S[i].nr , s1 = 0 , ct = 0; while(aux) s1 += aux % 10 , f[aux%10]++ , g[aux%10]++ , aux /= 10; int maxim = -1; for(int j = 0 ; j <= 10 ; j++) { if(g[j] > 0) ct++ , q[j]++; else { if(ct > maxim) maxim = ct; ct = 0; } } S[i].nrc = maxim; S[i].s = s1; } sort(S + 1, S + n + 1 , comp); cout << S[1].nr << endl; sort(S + 1, S + n + 1, cmp); cout << S[1].nr << endl; int maxi = -1; for(int i = 0 ; i <= 9 ; i++) if(q[i] > maxi) maxi = q[i]; for(int i = 0 ; i <= 9 ; i++) if(q[i] == maxi) cout << i << " "; }