# PBinfo #1952 – pattern1 – Rezolvare C++

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

## Enunț

Cerința
Se dă un număr natural n. Să se genereze o matrice pătratică de dimensiune 2n-1, după următoarele reguli:


elementul din mijlocul matricii este egal cu n
elementele de pe linia mediană și cele de pe coloana mediană (exceptând elementul din mijlocul matricii) sunt nule
folosind linia mediană și coloana mediană, se împarte matricea în alte 4 matrici care se generează similar, dar au dimensiunea 2n-1-1.

Date de intrare
Programul citește de la tastatură numărul n.

Date de ieșire
Programul va afișa pe ecran matricea generată.

Restricții și precizări

1 ≤ n ≤ 9

Exemplu:
Intrare

3
Ieșire

1 0 1 0 1 0 1 
0 2 0 0 0 2 0 
1 0 1 0 1 0 1 
0 0 0 3 0 0 0 
1 0 1 0 1 0 1 
0 2 0 0 0 2 0 
1 0 1 0 1 0 1

## Cod sursă C++

```cpp
#include <iostream>
using namespace std;
int A[515][515],n;
void pattern(int A[][515],int n,int sus,int jos,int st,int dr)
{
    if(n>=1)
    {
        int mi=(sus+jos)/2;
        int mj=(st+dr)/2;
        A[mi][mj]=n;
        pattern(A,n-1,sus,mi-1,st,mj-1);//NV
        pattern(A,n-1,sus,mi-1,mj+1,dr);//NE
        pattern(A,n-1,mi+1,jos,st,mj-1);//SV
        pattern(A,n-1,mi+1,jos,mj+1,dr);//SE
    }
}
void afisare(int A[][515],int n)
{
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=n;j++)
            cout<<A[i][j]<<" ";
        cout<<endl;
    }
}
int xlan(int x, int n)
{
    if(n==0) return 1;
    else
    {
        int p=xlan(x,n/2);
        if(n%2==0) return p*p;
        else return p*p*x;
    }
}
int main()
{
    int n,m;
    cin>>n;
    m=xlan(2,n)-1;
    pattern(A,n,1,m,1,m);
    afisare(A,m);
    return 0;
}
```

## Resurse

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