3128 - Patrat Magic 1

De la Universitas MediaWiki
Versiunea din 12 decembrie 2023 17:59, autor: Ramona Dragoș (discuție | contribuții) (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...)
(dif) ← Versiunea anterioară | Versiunea curentă (dif) | Versiunea următoare → (dif)

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, k număr natural
  • orice rezultat corect va fi punctat

Exemplu 1

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


Exemplu 2

Intrare
3
Ieșire
Nu au fost respectate cerintele impuse


Rezolvare

#3128 - PatratMagic1
def generate_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): "))

    if n % 4 != 0:
        print("Numărul introdus nu este de forma 4k.")
    else:
        magic_square = generate_magic_square(n)
        print_magic_square(magic_square)