Salida del cubo de Rubik, implementado en lenguaje C y Python

Tema

Inserte la descripción de la imagen aquí

  • Es decir, los valores horizontal y vertical se suman para ser iguales
    Inserte la descripción de la imagen aquí

ley:

  • 1. El valor en la columna del medio de la primera fila es 1. Entonces, use j = n / 2 + 1 para determinar el número de columnas de 1 y obtenga a [1] [j] = 1.

  • 2. El número de filas almacenadas en cada número es menor que el número de filas en el número anterior y el número de columnas se incrementa en 1. El número de filas está determinado por i = i-1, y el número de columnas está determinado por j = j + 1.

  • 3. Si una línea numérica es la primera línea, la siguiente línea numérica es la última línea.

  • 4. Si un número de fila de columna es la última columna, la siguiente columna de número es la primera columna.

  • 5. Si hay un número en la posición determinada por las reglas anteriores, o el número anterior es la última columna de la primera fila, coloque el número siguiente debajo del número anterior.

solución:

  • Utilice una matriz bidimensional para representar la realización.
  • Exprese las cinco reglas anteriores con códigos

Implementación del lenguaje C

// 打印指定阶数的 魔方阵
#include <stdio.h>
int main()
{
    
    
	int n, k , j, mo[50][50] = {
    
    0};		
	printf("请输入打印魔方阵的阶数:\n");
	scanf("%d", &n);
	// k, j 表示初始的 数字 1 位置, 下面表示循环当前元素的 位置
	k = 0;
	j = n/2; 
	// 给数字 1 填入数组中
	mo[k][j] = 1;
	
	// 1已经填进去了,我们将其他数 通过规律填到数组当中
	for(int i=2; i<=n*n; i++)
	{
    
    
		// 条件5 的数字该这样填进去
		if ((k == 0 && j == n - 1) || mo[(k-1 + n)%n][(j+1+n)%n] != 0) 
		{
    
    
			k = k +1;
			mo[k][j] = i;
		}
		// 2,3,4 都是一个东西, 用 k = (k-1 + n)%n; 这种 取模的运算,假如 5阶的魔法阵,5 + 1 = 1
		else
		{
    
    
			// 下一元素行
			k = (k-1 + n)%n;
			// 下一元素列
			j = (j+1+n)%n;
			mo[k][j] = i;
		}
	}
	// 打印魔方阵
	for(i = 0; i < n; i++)
	{
    
    
		for(int b = 0; b< n; b++)
		{
    
    
			printf("%6d", mo[i][b]);
		}
		printf("\n");
	}
	return 0;
}

Implementación de Python

  • Por el momento, no esperaba una forma sencilla de implementación, ni escribir una versión de sintaxis de Python según el lenguaje C ~
  • Una expresión de lista anidada se usa para generar una matriz bidimensional. De hecho, también se puede implementar usando numpy, array
n = int(input("请输入魔方阵的阶层:"))

# 使用嵌套列表推导式生成类似C语言的二维数组,元素均为0
mo = [[0 for i in range(n)] for i in range(n)]
k = 0
j = int(n/2)
mo[k][j] = 1
for i in range(2, n**2+1):
    if (k==0 and j == n-1) or (mo[(k-1 + n)%n][(j+1+n)%n] != 0):
        k += 1
        mo[k][j] = i
    else:
        k = (k - 1 + n)%n
        j = (j + 1 + n)%n
        mo[k][j] = i

for i in mo:
    print(i) 

Supongo que te gusta

Origin blog.csdn.net/pythonstrat/article/details/112850189
Recomendado
Clasificación