# PBinfo #4542 – InlocuireRec2 – Rezolvare C++

Sursa: Codul lui Andrei
Limbaj: C++
Autor rezolvare: Darius

## Enunț

Cerința
Se dă un tablou cu n elemente, numere naturale. Să se înlocuiască fiecare element din tablou care are număr impar de cifre cu numarul obținut prin eliminarea cifrelor impare.

Se vor defini și apela următoarele subprograme recursive:


citire, care citește de la tastatură cele n elemente ale unui tablou
afisare, care afișează pe ecran elementele tabloului separate prin exact un spațiu
numar_cifre, care determină numărul de cifre ale unui număr dat ca parametru
elim_cifre_impare, care determină pentru un număr dat ca parametru numărul obținut prin eliminarea cifrelor impare
inloc, care realizează înlocuirile cerute.

În programele C/C++ nu se vor folosi variabile globale.

Date de intrare
Se citește de la tastatură numărul n, iar apoi cele n elemente ale tabloului.

Date de ieșire
Se vor afișa pe ecran elementele tabloului obținut, separate prin exact un spațiu. 

Restricții și precizări

1 ≤ n ≤ 1000
elementele tabloului vor fi mai mici decât 1.000.000.000
prin eliminarea cifrelor impare dintr-un număr care conține numai cifre impare se obține 0

Exemplu:
Intrare

7
73 108 217 175 2124 5209 74149
Ieșire

73 8 2 0 2124 5209 44

## Cod sursă C++

```cpp
#include <iostream>
using namespace std;
void citire(int n , int a[])
{
	if(n > 0)
	{
		citire(n-1 , a);
		cin >> a[n];
	}
}
void afisare(int n , int a[])
{
	if(n > 0)
	{
		afisare(n-1 , a);
		cout << a[n] << " ";
	}
}
int elim_cifre_impare(int n)
{
	if(n == 0)
		return 0;
	else
	{
		int x = elim_cifre_impare(n/10);
		if(n % 2 == 0)
			x = 10 * x + n % 10;
		return x;
	}
}
int numar_cifre(int n)
{
	if(n < 10)
		return 1;
	else
		return 1 + numar_cifre(n / 10);
}
void inloc(int n , int a[])
{
	if(n > 0)
	{
		inloc(n-1 , a);
		if(numar_cifre(a[n]) % 2 == 1)
			a[n]  = elim_cifre_impare(a[n]);
	}
}
int main(){
	int n, a[1005];
  	cin >> n;
  	citire(n , a);
  	inloc(n , a);
  	afisare(n , a);
	return 0;
}
```

## Resurse

- [Pagina originală](https://codulluiandrei.ro/rezolvari/pbinfo/4542)
- [Sursa C++](https://codulluiandrei.ro/rezolvari/pbinfo/4542/cod.cpp)
- [Sursa pe GitHub](https://raw.githubusercontent.com/codulluiandrei/pbinfo/main/pbinfo-4542/main.cpp)
- [Cursuri de informatică pentru BAC](https://codulluiandrei.ro/academia/info-curs/pachet-cpp/)
