3342 - Patrat Magic 2: Difference between revisions

From Bitnami MediaWiki
Pagină nouă: == Enunt == 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 == 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 == Programul citește de la tastatură numărul n. == Date de ieșire == Programul afișează pe ecran p...
 
No edit summary
 
Line 1: Line 1:
== Enunt ==
== Enunt ==
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.
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 ==
== Cerința ==
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.
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 ==
== Date de intrare ==
Programul citește de la tastatură numărul n.
Programul citește de la tastatură numărul '''n'''.
== Date de ieșire ==
== Date de ieșire ==
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.
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 ==
== Restricții și precizări ==
*1 ⩽ n ⩽ 100
*'''1 ⩽ n ⩽ 100'''
*n va fi de forma 4k+1 sau 4k+3, k număr natural
*'''n''' va fi de forma '''4k+1''' sau '''4k+3''', '''k''' număr natural
*orice rezultat corect va fi punctat
*orice rezultat corect va fi punctat
== Exemplu 1 ==
== Exemplu 1 ==
;Intrare
;'''Intrare'''
:5
:5
;Ieșire
;'''Ieșire'''
:17 24 1 8 15
:11 24 7 20 3
:23 5 7 14 16
:4 12 25 8 16  
:4 6 13 20 22
:17 5 13 21 9
:10 12 19 21 3
:10 18 1 14 22
:11 18 25 2 9
:23 6 19 2 15
<br>
<br>
== Exemplu 2 ==
== Exemplu 2 ==
;Intrare
;'''Intrare'''
:3
:3
;Ieșire
;'''Ieșire'''
:Nu au fost respectate cerintele impuse
:Nu au fost respectate cerintele impuse
<br>
<br>

Latest revision as of 12:40, 6 January 2024

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>