# PBinfo #4249 – Inlocuire_cmmdc_oglindit – Rezolvare C++

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

## Enunț

Cerința
Se dă un tablou cu n elemente, numere naturale mai mari decât 1. Să se înlocuiască fiecare element din tablou cu cel mai care divizor comun al său cu oglinditul său și apoi să afișeze elementele din tabloului de la dreapta la stânga.

Se vor defini și apela următoarele subprograme:


citire, care citește de la tastatură valoarea lui n și cele n elemente ale tabloului
afisare, care afișează pe ecran elementele tabloului printr-o parcurgere de la dreapta la stânga, separate prin exact un spațiu
oglindit, care determină oglinditul unui număr dat
cmmdc, care calculează cel mai care divizor comun a două numere date

Î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 după modificarea cerută, 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

Exemplu:
Intrare

7
7 18 18 5 14 20 4 
Ieșire

4 2 1 5 9 9 7 
Explicație
Modificările efectuate sunt:

7 se înlocuiește cu 7 deoarece cmmdc(7,7) este 7.
18 se înlocuiește cu 9 deoarece cmmdc(18,81) este 9.
18 se înlocuiește cu 9 deoarece cmmdc(18,81) este 9.
14 se înlocuiește cu 1 deoarece cmmdc(14,41) este 1.
20 se înlocuiește cu 2 deoarece cmmdc(20,2) este 2.
4 se înlocuiește cu 4 deoarece cmmdc(4,4) este 4.

La final, elementele sunt afișate de la dreapta la stânga.

## Cod sursă C++

```cpp
#include <iostream>
using namespace std;
void citire(int A[], int &n)
{
    cin>>n;
    for(int i=1;i<=n;i++)
        cin>>A[i];
}
int oglindit(int n)
{
    int r=0;
    while(n>0)
    {
        r=r*10+n%10;
        n=n/10;
    }
    return r;
}
int cmmdc(int a, int b)
{
    if(b==0) return a;
    else return cmmdc(b,a%b);
}
void afisare(int A[], int n)
{
    for(int i=n;i>=1;i--)
        cout<<A[i]<<" ";
}
void inlocuire(int A[], int n)
{
    for(int i=1;i<=n;i++)
        A[i]=cmmdc(A[i],oglindit(A[i]));
}
int main()
{
    int A[1001],n;
    citire(A,n);
    inlocuire(A,n);
    afisare(A,n);
    return 0;
}
```

## Resurse

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