Rezolvare completă PbInfo #3124 PatratMagic0

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

Cum e corect?

cout < "As la info"; cout << "As la info"; cout >> "As la info";

Felicitări! Poți mai mult?

Avem sute de probleme pentru tine, fiecare cu explicații ușor de înțeles.

Greșit, dar nu-i bai!

Antrenează-te cu sutele de probleme pe care ți le-am pregătit. Îți explicăm fiecare problemă în parte.

Rezolvare

Iată rezolvarea de 100 de puncte pentru problema PatratMagic0:

#include <iostream>

using namespace std;

bool f[1000000];
int a[1000][1000];

int main()
{
    int n;
    bool magic = true;
    cin>>n;
    for(int i=0;i<n;++i)
        for(int j=0;j<n;++j){
            cin>>a[i][j];
            if(a[i][j]>n*n || a[i][j]<1) magic = false;
            if(f[a[i][j]] == 0) f[a[i][j]] = 1;
            else magic = false;
        }
    int s, c;
    /// diagonalele + constanta
    int s1 = 0, s2 = 0;
    for(int i=0;i<n;++i)
        s1+=a[i][i], s2+=a[i][n-i-1];
    if(s1!=s2) magic = false, c=0;
    else c = s1;
    /// liniile
    for(int i=0;i<n;++i)
    {
        s=0;
        for(int j=0;j<n;++j)
            s+=a[i][j];
        if(s!=c) magic = false;
    }
    /// coloanele
    for(int i=0;i<n;++i)
    {
        s=0;
        for(int j=0;j<n;++j)
            s+=a[j][i];
        if(s!=c) magic = false;
    }
    cout<<boolalpha<<magic;
    return 0;
}

Atenție

Enunțurile afișate pe această pagină aparțin exclusiv site-ului PbInfo. Astfel, pentru ștergerea conținutului, puteți să ne contactați la adresa Adresa de email.

Rezolvarea problemei #3124 PatratMagic0

Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #3124 PatratMagic0 de pe PbInfo.ro. Atenție: nu încurajăm copiatul codului! Totuși, credem cu tărie că analizarea unei soluții corecte este o metodă foarte ușoară de a învăța informatică, astfel că oferim sursele pentru peste 1500 de probleme de pe platforma PbInfo.ro.

Pentru rezolvări PbInfo de la peste 1500 de probleme, vă invităm să intrați pe site-ul nostru!