Как создать матрицу магического квадрата с помощью python

Вам дается корзина в виде матрицы. Если размер матрицы N x N, то диапазон количества яиц, которые вы можете положить в каждый слот корзины, составляет от 1 до N2. Ваша задача — расположить яйца в корзине так, чтобы сумма каждой строки, столбца и диагонали матрицы оставалась одинаковой.

Этот код работает только для нечетных чисел, но не для четных.

вот мой код, который я пробовал, но он не работал `

def matrix(n): 
    m = [[0 for x in range(n)] 
                      for y in range(n)]
    i = n / 2
    j = n - 1
    num = 1
    while num <= (n * n): 
        if i == -1 and j == n:
            j = n - 2
            i = 0
        else:
            if j == n: 
                j = 0 
            if i < 0: 
                i = n - 1
        if m[int(i)][int(j)]:
            j = j - 2
            i = i + 1
            continue
        else: 
            m[int(i)][int(j)] = num 
            num = num + 1
        j = j + 1
        i = i - 1
    print ("Sum of eggs in each row or column and diagonal ",n * (n * n + 1) / 2, "\n") 
    for i in range(0, n): 
        for j in range(0, n): 
            print('%2d ' % (m[i][j]),end = '') 
            if j == n - 1:  
                print()
n=int(input("Number of rows of matrix:"))
matrix(n)

`

Существует простая формула для создания магического квадрата с нечетными сторонами, которая не работает, когда стороны четные. Вы, видимо, используете этот алгоритм. Быстрый поиск в Google должен помочь вам разобраться и с квадратами с четными сторонами.

Frank Yellin 10.11.2022 20:24
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
1
183
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий
def matrix(n): 
m = [[0 for x in range(n)] 
                  for y in range(n)]
i = n / 2
j = n - 1
num = 1
while num <= (n * n): 
    if i == -1 and j == n:
        j = n - 2
        i = 0
    else:
        if j == n: 
            j = 0 
        if i < 0: 
            i = n - 1
    if m[int(i)][int(j)]:
        j = j - 2
        i = i + 1
        continue
    else: 
        m[int(i)][int(j)] = num 
        num = num + 1
    j = j + 1
    i = i - 1
print ("Sum of eggs in each row or column and diagonal ",n * (n * n + 1) / 2, "\n") 
for i in range(0, n): 
    for j in range(0, n): 
        print('%2d ' % (m[i][j]),end = '') 
        if j == n - 1:  
            print()

n=int(input("Количество строк матрицы:")) матрица (п)

def forEvenNumber(n):
    arr = [[(n * y) + x + 1 for x in range(n)] for y in range(n)]
    for i in range(0, n // 4):
        for j in range(0, n // 4):
            arr[i][j] = (n * n + 1) - arr[i][j];
    for i in range(0, n // 4):
        for j in range(3 * (n // 4), n):
            arr[i][j] = (n * n + 1) - arr[i][j];
    for i in range(3 * (n // 4), n):
        for j in range(0, n // 4):
            arr[i][j] = (n * n + 1) - arr[i][j];
    for i in range(3 * (n // 4), n):
        for j in range(3 * (n // 4), n):
            arr[i][j] = (n * n + 1) - arr[i][j];
    for i in range(n // 4, 3 * (n // 4)):
        for j in range(n // 4, 3 * (n // 4)):
            arr[i][j] = (n * n + 1) - arr[i][j];
    print("\nSum of all row, column and diagonals = ",
          n * (n * n + 1) // 2, "\n")
    for i in range(n):
        for j in range(n):
            print('%2d ' % (arr[i][j]), end = " ")
        print()
def forOddNumber(n):
    mgsqr = [[0 for x in range(n)]
             for y in range(n)]
    r = n // 2
    c = n - 1
    num = 1
    while num <= (n * n):
        if r == -1 and c == n:
            c = n - 2
            r = 0
        else:
            if c == n:
                c = 0
            if r < 0:
                r = n - 1
        if mgsqr[int(r)][int(c)]:
            c = c - 2
            r = r + 1
            continue
        else:
            mgsqr[int(r)][int(c)] = num
            num = num + 1
        c = c + 1
        r = r - 1
    print("\nSum of all row, column and diagonals = ",
          n * (n * n + 1) // 2, "\n")
    for i in range(0, n):
        for j in range(0, n):
            print('%2d ' % (mgsqr[i][j]), end='')
        print()
print("\nWELCOME:)\n")
n = int(input("Please Enter Number of Rows and Column (n*n): "))
if n%2==0:
    forEvenNumber(n)
else:
    forOddNumber(n)
print("\nThank You :)")

Это должно принимать четные входы и давать правильные результаты!

Другие вопросы по теме