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

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ă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

  • 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

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

Intrare
3
Ieșire
Nu au fost respectate cerintele impuse


Rezolvare

<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>