Se citesc n numere naturale de maxim 9 cifre. Pentru fiecare număr citit, să se calculeze cifra maximă
și cifra minimă, precum și numărul lor de apariții. Dacă toate cifrele sunt identice, se va afișa mesajul
“CIFRE EGALE “.
Exemplu: pentru n=3, dacă se citesc numerele
5347372 se va afișa cifra maxima 7 numar de aparitii 2, cifra minima 2 numar de aparitii 1
22222 se va afișa cifre egale
646464 se va afișa cifra maxima 6 numar de aparitii 3, cifra minima 4 numar de aparitii 3
Răspunsuri la întrebare
Răspuns de
1
#include <iostream>
#include <vector>
void diag(const std::string& str) {
char min = str[0], max = str[0];
size_t min_cnt = 1, max_cnt = 1;
for (size_t i = 1; i < str.size(); ++i) {
if (str[i] < min) {
min = str[i];
min_cnt = 1;
}
else if (str[i] == min)
++min_cnt;
if (str[i] > max) {
max = str[i];
max_cnt = 1;
}
else if (str[i] == max)
++max_cnt;
}
if (max == min)
std::cout << "CIFRE EGALE\n";
else
std::cout
<< "Cifra maxima: " << max << " Numar de aparitii: " << max_cnt
<< " Cifra minima: " << min << " Numar de aparitii: " << min_cnt << '\n';
}
int main() {
size_t i, n;
std::cin >> n;
std::vector<std::string> vec(n);
for (i = 0; i < n; ++i)
std::cin >> vec[i];
for (i = 0; i < n; ++i)
diag(vec[i]);
}
costinsergiuciu:
Multumesc!
1. Am utilizat std::string in loc de int pentru a usura procesul de determinare a cifrei max/min.
1.1 Convertirea din text (secvente de caractere introduse de la tastatura) intr-un numar este o operatie costistitoare si necesita mai mult timp de executie.
2. Am utilizat std::vector pentru un vector dinamic. Inlocuieste-l cu std::string[NMAX] daca vrei static. Prefer dinamic ca sa nu poluez segmentul de date a programului (fac economie de RAM).
4. Tipul size_t reprezinta un numar natural (unsigned), cu dimensiunea maxima de octeti.
Despre algoritm:
1. Daca cifra maxima si minima sunt aceleasi, inseamna ca toate cifrele, dintr-un numar, sunt egale.
2. Daca a fost gasita o noua cifra maxima/minima, nr. de aparitie se reincepe de la 1.
3. Daca a fost gasita o cifra egala cu cea maxima/minima, nr. de aparitie se adauga cu 1.
Alte întrebări interesante
Fizică,
8 ani în urmă
Matematică,
8 ani în urmă
Matematică,
8 ani în urmă
Matematică,
8 ani în urmă
Matematică,
8 ani în urmă
Matematică,
9 ani în urmă
Matematică,
9 ani în urmă