Lenguaje C | Matriz de cubo de Rubik de salida

Ejemplo 63: El lenguaje C realiza la salida "Matrix". El llamado Cubo de Rubik se refiere a cada fila, cada columna y la suma de las diagonales son iguales.

Ideas para la resolución de problemas: la disposición de los números en el Cubo de Rubik, el orden del Cubo de Rubik debe ser impar.

Pon 1 en la columna del medio de la primera fila.
Pulsa los números del 2 al n * n sucesivamente: la fila de cada número se reduce en 1 y el número de columnas aumenta en 1.
Si el comportamiento del número anterior es Si el número es 1, el número de filas del siguiente número es n.
Cuando el número de columnas del número anterior es n, el número de columnas del siguiente número debe ser 1 y el número de filas debe reducirse por 1 de
acuerdo con la posición determinada por las reglas anteriores. Cuando un número está en la primera fila y en la enésima columna, coloque el siguiente número debajo del número anterior

Demostración del código fuente:

#include<stdio.h>//头文件 
int main()//主函数 
{
    
    
        int a[20][20]={
    
    0};//定义二维数组 
    int i,j,n,k; //定义整型变量 
        i=1;//赋值 
        printf("请输入阶数为1~15之间的奇数:\n");//提示语句 
        scanf("%d",&n);//输入魔方阵的维度n
        j=n/2+1; // j是维度的一半加1.
        a[i][j]=1; //确定第一排的中间一个数为1
        for(k=2;k<=n*n;k++)//已经确定1的位置了,再循环确定2~n*n的位置
        {
    
    
            i=i-1; //挪位,竖排往上挪一位。
            j=j+1; //挪位,横排往右挪一位。
            if((i<=0)&&(j<=n)) //如果竖排挪到顶,同时横排还没有超过最右,竖排就到从最下再继续。
            {
    
    
              i=n; 
      } 
            if((i<=0)&&(j>n)) //如果竖排挪到顶,同时横排超过最右,竖排往下挪两位,横排往左移一位。
            {
    
     
                    i=i+2; 
                    j=j-1; 
            } 
            if(j>n) //如果只有横排超过最右,横排挪到左边第二行。
            {
    
     
                j=1; 
            } 
            if(a[i][j]==0)
            {
    
    
              a[i][j]=k; //如果这个位置还没有赋值,那么赋值为k。
      } 
            else  //已经赋值过了。那么竖排往下挪两位,横排往左移一位,再赋值为k。
            {
    
     
                i=i+2; 
                j=j-1; 
                a[i][j]=k;
            } 
        } 
        for(i=1;i<=n;i++) //循环输出位置。
        {
    
    
          for(j=1;j<=n;j++)
          {
    
    
            printf("%3d ",a[i][j]);
      } 
            printf("\n");//换行 
        }
}

Los resultados de la compilación y ejecución son los siguientes:

请输入阶数为1~15之间的奇数:
3
  8   1   6
  3   5   7
  4   9   2

--------------------------------
Process exited after 1.327 seconds with return value 3
请按任意键继续. . .

Arriba, si lo ves y crees que es útil para ti, dale a Xiaolin un pulgar hacia arriba y compártelo con las personas que lo rodean, para que Xiaolin también tenga la motivación para actualizar, gracias padres y aldeanos ~

Salida en lenguaje C Matriz de cubo de Rubik
Más casos pueden pasar al número público: Entrada en lenguaje C a nivel competente

Supongo que te gusta

Origin blog.csdn.net/weixin_48669767/article/details/112762283
Recomendado
Clasificación