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ăspunsuri la întrebare
Răspuns de
2
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
}
sikesjack1:
De ce folosim void, in loc de int?
Alte întrebări interesante
Matematică,
8 ani în urmă
Limba română,
8 ani în urmă
Matematică,
8 ani în urmă
Matematică,
8 ani în urmă
Matematică,
8 ani în urmă
Limba română,
9 ani în urmă
Limba română,
9 ani în urmă
Limba română,
9 ani în urmă