Programul citeste un numar natural din 3 cifre [100, 999] si determina daca numarul contine cifre
care se repeta. Daca da – afiseaza cifra si numarul de repetari. Daca nu – afiseaza mesajul, ca toate
cifrele sunt diferite.
Exemplu. In numarul 757 cifra 7 se repeta de 2 ori, iar numarul 589 are toate cifrele diferite.
Sa contina limbaj cu cititorul va rog!
Multumesc!.
Răspunsuri la întrebare
Răspuns:
#include <iostream>
using std::cout, std::cin, std::endl;
// Funcția returnează „true” dacă numărul este format din 3 cifre, false altfel.
static bool respectaNrCifre(int numar) {
int contorCifre{};
while (numar) {
++contorCifre;
numar /= 10;
}
return contorCifre == 3 ? true : false;
}
static void verificaRepetareCifre(int numar) {
int contorCifre[10]{}, ultimaCifra;
// Cât timp numărul citit este diferit de 0
while (numar) {
// Luăm ultima cifră a numărului
ultimaCifra = numar % 10;
/* Și incrementăm cu 1 valoarea de pe indexul ultimei cifre de exemplu avem contorCifre = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0] pentru numărul 442 contorCifre ar arăta ceva de genul
0 1 2 3 4 5 6 7 8 9
contorCifre = [0, 0, 1, 0, 2, 0, 0, 0, 0, 0]
și acuma știm că cifra 4 apare de 2 ori deoarece în vector salvăm numărul de apariții al cifrelor */
++contorCifre[ultimaCifra];
numar /= 10;
}
/* după parcurgem vectorul și afișăm doar dacă valoarea de pe poziția cifrei este mai mare decât 1 (dacă apare măcar de 2 ori) */
for (int i = 0; i < 10; ++i) {
if (contorCifre[i] > 1) {
cout << "Cifra " << i << " se repeta de " << contorCifre[i] << " ori!"
<< endl;
return; // și returnăm din funcție
}
}
// sau dacă toate cifrele sunt diferite, afișăm asta și returnăm din funcție aici
cout << "Toate cifrele sunt diferite" << endl;
return;
}
int main() {
int numarCitit;
cout << "Introdu numarul (max 3 cifre) >> ";
// citim numărul de la tastatură
cin >> numarCitit;
// dacă nu respectă condiția ieșim din program
if (!respectaNrCifre(numarCitit)) {
cout << "Numarul trebuie sa fie format din 3 cifre!" << endl;
exit(EXIT_FAILURE);
}
// altfel afișăm mesajele
verificaRepetareCifre(numarCitit);
}