👤

Buna!
Ma poate ajuta cineva la

#3119 Impare_Bac
Această problemă acceptă numai soluții în C++.
Clasa a 10-a Subprograme Subprograme care întorc valori prin parametri Impare_Bac
Etichete: Bacalaureat Bacalaureat 2019 Cifrele unui număr




Cerința
Subprogramul Impare are un singur parametru, n, prin care primește un număr natural. Subprogramul înlocuiește fiecare cifră impară a lui n cu cea mai mare cifră pară strict mai mică decât ea (astfel cifra 1 se înlocuieşte cu cifra 0, cifra 3 cu cifra 2 etc.) și furnizează numărul obținut tot prin parametrul n.

Scrieți definiția completă a subprogramului.

Restricții și precizări
1 ≤ n ≤ 1.000.000.000
Numele funcției va fi Impare
Funcția va primi un singur parametru, numărul n, iar la finalul funcției n va avea valoarea cerută.

Exemplu
Dacă n=235690, atunci, după apel, n=224680, iar dacă n=15690, atunci, după apel, n=4680.

Important
Soluția propusă va conține doar definiția funcției cerute. Prezența în soluție a altor instrucțiuni poate duce la erori de compilare sau de execuție care vor avea ca efect depunctarea soluției.

Solutia mea nu e buna, desi functioneaza:

#include

using namespace std;
unsigned int Impare (int n)
{
unsigned int rasturnat=0;
unsigned int nou=0;
unsigned int copie=n;
unsigned int cifranoua;
while (n !=0)
{
unsigned int cifra=n%10;
n /=10;
if (cifra % 2==1)
cifranoua=cifra-1;
else
cifranoua = cifra;
rasturnat = rasturnat *10+cifranoua;
}
while (rasturnat !=0)
{
unsigned int cifra = rasturnat %10;
nou = nou*10+cifra;
rasturnat /=10;
}

if (copie %10==0)
nou =nou*10;

return nou;
}
int main()
{
int x;
cin >>x;
cout < return 0;
}

Multumesc!


Răspuns :

Cerinta spune ca functia furnizează numărul obținut tot prin parametrul n.

void Impare (int& n)// n-referinta si functia nu returneaza nimic

{

unsigned int rasturnat=0;

unsigned int nou=0;

unsigned int copie=n;

unsigned int cifranoua;

//sa nu pierdem 0-urile de la sfarsitul numarului

unsigned int zerouri=0;

while(n%10==0)z++,n/=10;

while (n !=0)

{

unsigned int cifra=n%10;

n /=10;

if (cifra % 2==1)

cifranoua=cifra-1;

else

cifranoua = cifra;

rasturnat = rasturnat *10+cifranoua;

}

while (rasturnat !=0)

{

unsigned int cifra = rasturnat %10;

nou = nou*10+cifra;

rasturnat /=10;

}

/*

// ce faci aici e doar pentru un singur 0 la finalul numarului

if (copie %10==0)

nou =nou*10;

*/

n = nou;

while(zerouri--)n*=10;//pun 0-urile de la sfarsitul numarului initial

}

Vă mulțumim că ați ales să vizitați platforma noastră dedicată Informatică. Sperăm că informațiile disponibile v-au fost utile. Dacă aveți întrebări suplimentare sau aveți nevoie de sprijin, nu ezitați să ne contactați. Vă așteptăm cu drag și data viitoare! Nu uitați să adăugați site-ul nostru la favorite pentru acces rapid.


Wix Learning: Alte intrebari