cuadrado mágico de pitón

Descripción del problema

        Organice una serie de números enteros positivos consecutivos 1 ~ norte^{2}en una matriz digital bidimensional con n filas y n columnas (n ​​es un número impar), de modo que la suma de los números en cada fila, cada columna y la diagonal de la la matriz es igual n\times \left ( n^{2}+1 \right )\div 2. Utilice código Python para implementar los requisitos anteriores e imprima la matriz.

norte^{2}La esencia de este problema es: organizar un total de         1~ norte^{2}enteros positivos en una matriz de n filas yn columnas de acuerdo con ciertas reglas. La regla es que la suma de los números en cada fila de la matriz es n\times \left ( n^{2}+1 \right )\div 2, la suma de los números en cada columna también es n\times \left ( n^{2}+1 \right )\div 2y la suma de los números en la diagonal también es n\times \left ( n^{2}+1 \right )\div 2. Cabe señalar que n es un número impar. Si n es 1, no hay valor de investigación. Podemos comenzar con n como 3 para ver si podemos descubrir las reglas del arreglo.

        Podemos encontrar las reglas de disposición de los números en la matriz del cuadrado mágico de orden n en la matriz del cuadrado mágico anterior: el número 1 debe ubicarse en la columna central de la primera fila, comenzando desde 1 y aumentando en 1 hacia la parte superior derecha. Si excede el límite superior, el número más allá Coloque el número en la última fila de la misma columna. Si excede el límite derecho, coloque el número excedido en la primera columna de la misma fila. Si la posición del número incremental ya existe, aumentará hacia abajo y el número total de números que deben aumentarse hacia abajo será Es un múltiplo entero de n. Ordenando los números según esta regla podemos obtener una matriz cuadrada mágica de orden n.

Generar la matriz del cubo de Rubik

        De acuerdo con las reglas de disposición de la matriz del cuadrado mágico, podemos escribir una función que genere los datos de la matriz del cuadrado mágico. El código es el siguiente:

def magic_square_array(n: int):
    """
    生成魔方矩阵
    
    :param n: 矩阵的行列数
    :return: 
    """
    if n % 2 != 1:  # 如果n不为奇数时
        raise ValueError('n must is odd number')  # 抛出n的值错误
    array = [[0] * n for i in range(n)]  # 创建一个二维列表来存放每行每列的数值
    row = 0  # 初始行的值为0
    column = n // 2  # 初始列的值为n/2,需要注意列表的索引从0开始
    for i in range(1, n ** 2 + 1):  # 使用循环连续取出1~n的平方的所有正整数
        row = n - 1 if row < 0 else row  # 如果行的值小于0时,行的值为n-1,否则行的值不变
        column = 0 if column >= n else column  # 如果列的值大于等于n时,列的值为0,否则列的值不变
        array[row][column] = i  # 把数字i存放到二维列表中
        if i % n != 0:  # 当i不能整除n时
            row -= 1  # 行的值减一
            column += 1  # 列的值加一
        else:  # 否则
            row += 1  # 行的值加一
    return array  # 返回二维列表

Imprimir la matriz del cubo de Rubik

        Luego diseñamos una función para imprimir los datos de la matriz del cuadrado mágico. El código es el siguiente:

def print_array(n: int):
    """
    打印魔方矩阵

    :param n: 矩阵的行列数
    :return:
    """
    array = magic_square_array(n)  # 使用magic_square_array生成魔方矩阵二维列表
    for i in range(n):  # 使用循环连续获取行数
        for j in range(n):  # 使用循环连续获取列数
            print(str(array[i][j]).center(len(str(n**2))), end=' ')  # 打印出i行j列的数字
        print()  # 换行

código completo

        El código completo es el siguiente:

def magic_square_array(n: int):
    """
    生成魔方矩阵

    :param n: 矩阵的行列数
    :return:
    """
    if n % 2 != 1:  # 如果n不为奇数时
        raise ValueError('n must is odd number')  # 抛出n的值错误
    array = [[0] * n for i in range(n)]  # 创建一个二维列表来存放每行每列的数值
    row = 0  # 初始行的值为0
    column = n // 2  # 初始列的值为n/2,需要注意列表的索引从0开始
    for i in range(1, n ** 2 + 1):  # 使用循环连续取出1~n的平方的所有正整数
        row = n - 1 if row < 0 else row  # 如果行的值小于0时,行的值为n-1,否则行的值不变
        column = 0 if column >= n else column  # 如果列的值大于等于n时,列的值为0,否则列的值不变
        array[row][column] = i  # 把数字i存放到二维列表中
        if i % n != 0:  # 当i不能整除n时
            row -= 1  # 行的值减一
            column += 1  # 列的值加一
        else:  # 否则
            row += 1  # 行的值加一
    return array  # 返回二维列表


def print_array(n: int):
    """
    打印魔方矩阵

    :param n: 矩阵的行列数
    :return:
    """
    array = magic_square_array(n)  # 使用magic_square_array生成魔方矩阵二维列表
    for i in range(n):  # 使用循环连续获取行数
        for j in range(n):  # 使用循环连续获取列数
            print(str(array[i][j]).center(len(str(n**2))), end=' ')  # 打印出i行j列的数字
        print()  # 换行


print_array(5)

Los resultados de la ejecución son los siguientes:

Supongo que te gusta

Origin blog.csdn.net/qq_40148262/article/details/131166760
Recomendado
Clasificación