3342 - Patrat Magic 2
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>
- 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>