# PBinfo #3124 – patratmagic0 – Rezolvare C++

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

## Enunț

Un Pătrat Magic este un pătrat ce conține numerele de la 1 la n 2 în care sumele fiecăror linii, coloane și a celor două diagonale sunt egale. Această sumă se mai numește și constanta pătratului magic.


Cerința
Se dă un număr natural n, urmat de o matrice pătratică cu n * n elemente, numere naturale. Să se verifice dacă matricea dată este un pătrat magic.

Date de intrare
Programul citește de la tastatură numărul n, iar apoi n * n numere naturale, reprezentând elementele matricei.

Date de ieșire
Programul va afișa pe ecran true dacă matricea dată este un pătrat magic sau false dacă nu este.

Restricții și precizări

3 ≤ n ≤ 500
cele n numere citite vor fi mai mici sau egale decât 250.000

Exemplu:
Intrare

3
4 9 2 
3 5 7 
8 1 6 
Ieșire

true

## Cod sursă C++

```cpp
#include <iostream>
using namespace std;
bool f[1000000];
int mat[501][501], n, val1 = 0, val2 = 0, temp = 0, test = 0;
bool adv = true;
int main() {
    cin >> n;
    for (int i = 1; i <= n; ++i)
        for (int j = 1; j <= n; ++j) {
            cin >> mat[i][j];
            if (mat[i][j] > n * n || mat[i][j] < 1) adv = false;
            if (f[mat[i][j]] == 0) f[mat[i][j]] = 1;
            else adv = false;
        }
    for (int i = 1; i <= n; ++i) {
        val1 = val1 + mat[i][i];
    	val2 = val2 + mat[i][n - i + 1];
    } if (val1 != val2) {
    	adv = false;
    	test = 0;
    } else test = val1;
    for (int i = 1; i <= n; ++i) {
    	temp = 0;
        for (int j = 1; j <= n; ++j)
        	temp = temp + mat[i][j];
        if (temp != test) adv = false;
    }
    for (int i = 1; i <= n; ++i) {
    	temp = 0;
        for (int j = 1; j <= n; ++j)
        	temp = temp + mat[j][i];
        if (temp != test) adv = false;
    } if (adv == true) cout << "true";
    else cout << "false";
    return 0;
}
```

## Resurse

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