¿Cómo escribir un cuadrado mágico en lenguaje C? ¿Gracias por tu respuesta?
//Análisis: La matriz del cuadrado mágico tiene las siguientes reglas:
// 1: El número natural 1 siempre está en una columna de la primera fila de la matriz cuadrada.
// 2: El número natural posterior está en la parte superior derecha del número actual,
// 1) Si está en la primera línea, el número de filas se convierte en el número de la enésima fila y columna más 1;
// 2) Si está en la última columna, el número de filas se reduce en 1 y el número de columnas es la fila 1.
// 3) Si ya hay un número en la posición del número siguiente, el número de filas aumentará en 1 y el número de columnas permanecerá sin cambios.
/****************************************** ************************************************** * **********************************
Rellena hábilmente los números impares con magia cubo (matriz de cubos de Rubik) [publicado nuevamente] 2007-01-03 17:57 1. ¿Qué es un cuadrado mágico?
(En términos simples) complete algunos números regulares en un diagrama cuadrado con números iguales de cuadrículas verticales y horizontales, de modo que la suma de los números en cada fila, cada columna y cada diagonal sea igual. Un diagrama cuadrado de este tipo se llama cuadrado mágico.
Los cuadrados mágicos se dividen en cuadrados mágicos de orden impar y cuadrados mágicos de orden par. Un cuadrado mágico impar se refiere a un diagrama de matriz cuadrada en el que las filas horizontales y las columnas verticales son todas números impares (es decir, 3, 5, 7, 9...). Un cuadrado mágico de orden par se refiere a una matriz cuadrada con números pares en las filas horizontales y las columnas verticales (es decir, 4, 6, 8, 10...).
2. Cómo rellenar cuadrados mágicos de orden impar.
El más simple de los cuadrados mágicos de orden impar es el cuadrado mágico de tercer orden, también conocido como "Diagrama de los Nueve Palacios".
Por lo general, cuando nos encontramos con este tipo de problemas, utilizamos el método de análisis, agrupación y prueba para derivarlo. Este método es más problemático y es aún más difícil si es de quinto orden. cuadrado mágico o un cuadrado mágico de séptimo orden.
Existe un método que no solo puede completar rápidamente el cuadrado mágico de tercer orden, sino también completar rápidamente el cuadrado mágico de quinto orden, el cuadrado mágico de séptimo orden y el cuadrado mágico de noveno orden. cuadrado... ese es el "método de fórmula oral" ”
Función
“1” Siéntate en el medio del lado y completa los números en diagonal
<; p>Sal al lado y completa el lado opuesto, y gira hacia abajo cuando encuentres los números.Sal de la esquina solo una vez y luego regresa al siguiente espacio.
Nota:
(1) El "1" aquí se refiere al primer número de la columna que se debe completar.
(2) "1" se encuentra en el medio del lado, lo que significa que el primer número debe llenarse en el espacio en el medio de cualquier lado.
(3) Al pasar del 1 al 2, primero debe inclinarse hacia afuera (por ejemplo: complete el primer número en el medio de la parte superior y, al completar el segundo número, vaya a la parte superior). izquierda o superior derecha (oblicuamente), al completar los siguientes números, también debes seguir oblicuamente la misma dirección.
********************************************* ***** ********************************************** ****** *************************************/
#include
usando el espacio de nombres std;
void main()
{
int a[32][32] ,i,j,k,p ,n;
p=1
mientras(p==1)
{
cout<<"Ingrese n( n=1~25):"
cin>>n
if((n!=0)&&(n<=25) )&&(n%2!= 0))
p=0
}
for(i=1;i<=n;i++)
for (j=1;j<=n;j++)
a[i][j]=0
j=n/2+; 1;
a[1][j]=1
for(k=2;k<=n*n;k++)
{
i= i-1;
j=j+1
si((i<1)&&(j>n))
{
i=i+2
j=j-1
}
si no
{
si(i<1)
i=n
si(j>n)
j=; 1;
}
if(a[i][j]==0)
a[i][j]=k; >
else
{
i=i+2
j=j-1; [j]=k;
p>}
}
para(i=1;i<=n;i++)
{
for (j=1;j<=n;j++)
printf("ingrese el tamaño del cuadrado (impar && <=15):\n");
scanf("%d",&size)
mientras(tamaño%2==0||tamaño>15||tamaño<3)
{
printf("error d
¡Debido a la entrada incorrecta! ¡Introdúzcala de nuevo!\n");
scanf("%d",&size);
}
for( i=0;i for(j=0;j cuadrado[i][j]=0; i=0;j=(tamaño-1)/2; cuadrado[i][j]=1 for(count=2;count<= tamaño*tamaño;cuenta++) { fila=i-1<0?(tamaño-1):(i-1); j-1<0?(tamaño-1):(j-1); if(cuadrado[fila][cloum]) i=(++i)% tamaño; else {i=fila j=j-1<0?(tamaño-1):(j-1); /p> } cuadrado[i][j]=count; } printf("el %d cuadrado es:\n ",tamaño); for(i=0;i { for(j=0;j printf("%d",cuadrado[i][j]); printf("\n"); > } Solo se pueden encontrar números impares de cuadrados mágicos #define N 20 main() { int a[N][N]; int n,i,j,r scanf("%d",&n); /p> int n,i,j,r; p> for(i=0;i i=0; j=n/2 a[i][j]=1; p>for (r=2;r<=n*n; r++) if (a[(i+n-1)%n][(j+1)%n]==0 ) {i=(i+n -1)%n;j=(j+1)%n;a[i][j]=r;} más {i=(i+1) %n;a[i][j]=r;} for(i=0;i { for( j=0;j printf( "\n"); } } Esto fue escrito por otra persona antes, ¡consúltelo!