5 Se citeşte un număr natural cu toate cifrele nenule, n, şi se cere să se scrie numărul obţinut prin eliminarea tuturor cifrelor impare din n, respectiv -1 dacă nu există astfel de cifre sau dacă toate cifrele lui n sunt impare.
Exemplu: dacă n= 23541 se scrie 24, iar dacă n=28 se scrie -1.
Daca poate cineva sa imi zica ce e gresit in rezolvarea problemei (poza) sau daca e gresita complet sa ma ajute sa o rezolv.
Multumesccc!
Răspunsuri la întrebare
Salut!
Greselile din rezolvarea ta:
- nu ai inclus si o verificare daca numarul contine doar cifre pare (nu contine cifre impare)
- instructiunea n=n/10 ai pus-o in interiorul if-ului care iti verifica daca ultima cifra a numarului n este para, si atunci cand se va ajunge la un nr impar programul nu va face nimic si se va opri
- la sfarsitul programului tu verifici daca r % 2 != 0 ceea ce se traduce ca si "daca ultima cifra a numarului format doar cu cifre pare este impara" ceea ce va fi o afirmatie falsa intotdeauna, asadar programul tau nu va afisa niciodata "-1"
Cum ai putea sa iti rezolvi greselile si cateva sfaturi:
- in primul rand, sa adaugi o variabila "semafor" (de tip bool, care tine minte true sau false) care la inceputul programului va fi false, iar daca exista cel putin o cifra impara aceasta devine true
- evident, sa iti pui comanda n=n/10 in afara if-ului care verifica paritatea ultimei cifre
- la sfarsitul programului, sa verifici daca numarul nou format este 0 sau daca variabila "semafor" este false, daca se intampla oricare dintre aceste cazuri atunci se va afisa "-1", altfel se afiseaza numarul respectiv pt ca este bun
Rezolvarea cerintei:
#include <iostream>
using namespace std;
int main() {
int n, p = 1, nrNou = 0;
bool existaImp = false; //variabila "semafor"
cin >> n;
while (n) {
if (n % 2 != 0) { //daca exista cel putin o cifra impara
existaImp = true;
}
if (n % 10 % 2 == 0) { //daca ultima cifra e para
nrNou += n % 10 * p; //o adaug in numarul nou
p *= 10; //si cresc puterea
}
n /= 10; //de fiecare data elimin ultima cifra a lui n
}
if (nrNou == 0 || !existaImp) { //daca numarul nou este 0 (nu exista nr pare) sau nu exista nr impare
cout << "-1";
}
else {
cout << nrNou;
}
return 0;
}
1 = true, 0 = false