3128 - Patrat Magic 1: 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, k număr natural
*'''n''' va fi de forma '''4k''', '''k''' număr natural
*orice rezultat corect va fi punctat
*orice rezultat corect va fi punctat
== Exemplu 1 ==
== Exemplu 1 ==
;Intrare
;'''Intrare'''
:4
:4
;Ieșire
;'''Ieșire'''
:9 15 1 7
:1 15 14 4
:14 4 6 12
:12 6 7 9
:3 5 11 13
:8 10 11 5  
:8 10 16 2
:13 3 2 16  
<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>
Line 29: Line 29:
<syntaxhighlight lang="python" line>
<syntaxhighlight lang="python" line>
#3128 - PatratMagic1
#3128 - PatratMagic1
def is_valid_input(n):
    if not (1 <= n <= 100 and n % 4 == 0):
        return False
    return True
def generate_magic_square(n):
def generate_magic_square(n):
    if not is_valid_input(n):
        return "Nu au fost respectate cerintele impuse"
     magic_square = [[0] * n for _ in range(n)]
     magic_square = [[0] * n for _ in range(n)]


     i, j = 0, n // 2
     i, j = 0, n // 2
     current_num = 1
     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:
    while num <= n**2:
            i, j = newi, newj
         magic_square[i][j] = num
         else:
        num += 1
            i = (i + 1) % n
        i -= 1
         j += 1


    return magic_square
        if i < 0 and j >= n:
            i += 2
            j -= 1
        elif i < 0:
            i = n - 1
        elif j >= n:
            j = 0
        elif magic_square[i][j] != 0:
            i += 2
            j -= 1


 
    result = ""
def print_magic_square(magic_square):
     for row in magic_square:
     for row in magic_square:
         print(" ".join(map(str, row)))
         result += " ".join(map(str, row)) + "\n"
 


if __name__ == "__main__":
     return result
     n = int(input("Introduceți n (de forma 4k): "))


     if n % 4 != 0:
# Citirea datelor de intrare
        print("Numărul introdus nu este de forma 4k.")
try:
     else:
     n = int(input("Introduceti n: "))
        magic_square = generate_magic_square(n)
     result = generate_magic_square(n)
        print_magic_square(magic_square)
    print(result)
except ValueError:
    print("Input invalid. Introduceti un numar natural.")


</syntaxhighlight>
</syntaxhighlight>

Latest revision as of 12:25, 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, k număr natural
  • orice rezultat corect va fi punctat

Exemplu 1[edit | edit source]

Intrare
4
Ieșire
1 15 14 4
12 6 7 9
8 10 11 5
13 3 2 16


Exemplu 2[edit | edit source]

Intrare
3
Ieșire
Nu au fost respectate cerintele impuse


Rezolvare[edit | edit source]

<syntaxhighlight lang="python" line>

  1. 3128 - PatratMagic1

def is_valid_input(n):

   if not (1 <= n <= 100 and n % 4 == 0):
       return False
   return True

def generate_magic_square(n):

   if not is_valid_input(n):
       return "Nu au fost respectate cerintele impuse"
   magic_square = [[0] * n for _ in range(n)]
   i, j = 0, n // 2
   num = 1
   while num <= n**2:
       magic_square[i][j] = num
       num += 1
       i -= 1
       j += 1
       if i < 0 and j >= n:
           i += 2
           j -= 1
       elif i < 0:
           i = n - 1
       elif j >= n:
           j = 0
       elif magic_square[i][j] != 0:
           i += 2
           j -= 1
   result = ""
   for row in magic_square:
       result += " ".join(map(str, row)) + "\n"
   return result
  1. Citirea datelor de intrare

try:

   n = int(input("Introduceti n: "))
   result = generate_magic_square(n)
   print(result)

except ValueError:

   print("Input invalid. Introduceti un numar natural.")

</syntaxhighlight>