3342 - Patrat Magic 2

From Bitnami MediaWiki

Enunt[edit | edit source]

Un Pătrat Magic este un pătrat ce conține toate 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[edit | edit source]

Se dă un număr natural n, de forma n=4k. Să se genereze și să se afișeze un pătrat magic de latură n.

Date de intrare[edit | edit source]

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

Date de ieșire[edit | edit source]

Programul afișează pe ecran pătratul magic construit, câte o linie a matricei pe câte o linie a ecranului, elementele fiecărei linii fiind separate prin câte un spaţiu.

Restricții și precizări[edit | edit source]

  • 1 ⩽ n ⩽ 100
  • n va fi de forma 4k+1 sau 4k+3, k număr natural
  • orice rezultat corect va fi punctat

Exemplu 1[edit | edit source]

Intrare
5
Ieșire
11 24 7 20 3
4 12 25 8 16
17 5 13 21 9
10 18 1 14 22
23 6 19 2 15


Exemplu 2[edit | edit source]

Intrare
3
Ieșire
Nu au fost respectate cerintele impuse


Rezolvare[edit | edit source]

<syntaxhighlight lang="python" line>

  1. 3342 - PatratMagic2

def generate_magic_square(n):

   if n % 4 == 1:
       return generate_odd_magic_square(n)
   elif n % 4 == 3:
       return generate_odd_magic_square(n)
   else:
       print("Nu au fost respectate cerintele impuse.")
       return None

def generate_odd_magic_square(n):

   magic_square = [[0] * n for _ in range(n)]
   i, j = 0, n // 2
   current_num = 1
   while current_num <= n * n:
       magic_square[i][j] = current_num
       current_num += 1
       newi, newj = (i - 1) % n, (j + 1) % n
       if magic_square[newi][newj] == 0:
           i, j = newi, newj
       else:
           i = (i + 1) % n
   return magic_square

def print_magic_square(magic_square):

   for row in magic_square:
       print(" ".join(map(str, row)))

if __name__ == "__main__":

   n = int(input("Introduceți n (de forma 4k+1 sau 4k+3): "))
   magic_square = generate_magic_square(n)
   if magic_square:
       print_magic_square(magic_square)

</syntaxhighlight>