Red de conocimiento informático - Computadora portátil - Cuadrado Mágico 4×4 C++

Cuadrado Mágico 4×4 C++

#include

#include

#include

#define max 100

int magic[max][max];

clase HF //Cuadrado mágico

{

privado:

int n; //El número factorial del cuadrado mágico

int x,y; //El subíndice de la matriz, eje X y eje Y

int i ,j; / /Variable de bucle

int di,dx,dy; //Utilizada para cuadrados mágicos pares e impares

int oucs; > int temp;

public:

void Accept(); //Aceptar datos

void jshf() //Cuadrado mágico factorial impar

void souhf (); //Cuadrado mágico doble y par

void dsouhf(); //Cuadrado mágico simple y par

void operar(); combinación

void display(); //Mostrar resultados

};

void HF::accept() //Aceptar datos

{

cout<<"Por favor, introduce el número factorial n del cuadrado mágico: ";

cin >>n;

}

void HF::jshf() //Cuadrado mágico impar (2n+1) (método del péndulo continuo)

{

x=n/2,y=0; //X Y representa el eje numérico (establezca la esquina superior izquierda para (0, 0))

for (i=1;i<=n*n;i++)

{

magic[y][x ] =i; //Asignar valores a las cuadrículas x*y

if (i%n==0) //Hay un número en la esquina superior derecha, colóquelo debajo

y++;

else if (y==0) //Excede el límite superior

x++,y= n-1;

else if (x==n-1) //Excede el límite derecho

x=0,y--;

else ///Situación normal

x++,y--;

}

}

void HF::souhf() // Cuadrado mágico doble par (método de simetría)

{

for (x=0;x

for (y=0;y

if((x+y)%2==0) //Equivalente a marcar el libro con cuadros amarillos

{

magic [x][y]= -1;

magic[x][n-y-1]= -1;

magia[n-x-1][y]= -1

magia[n-x-1][n-y-1]= -1;

}

for(x=0;x

for(y=0;y

{

oucs=x*n+y; //oucs es una constante par

if(magic[x][y]== -1) //Asigna un valor al número marcado

magic[x][y]=n*n-oucs

else

magic[x][y]=oucs+1; // Asignar valores a números no marcados

}

}

void HF::dsouhf() //Orden único y par (2(2m+ 1)) Cuadrado mágico (método Stretch)

{

for (di=0;di<4;di++) //Bloqueo del cuadrado mágico

{

switch (di)

{

caso 0: //Un trozo de A en la esquina superior izquierda

dx=0, dy=0 ;

break;

caso 1: //La pieza inferior derecha de B

dx=n/2,dy=n/2;

break;

caso 2: //Un trozo de C en la esquina superior derecha

dx=n/2,dy=0;

break;

caso 3: //La pieza inferior izquierda de D

dx=0;dy=n/2;

break;

predeterminado:

break;

}

x=(n/2)/2,y=0 // El número en la primera línea de 1/4

int nhsq; // 1/2 n al cuadrado

nhsq=(n/2)*(n/2);

for (i=1; i<=nhsq;i++)//Asigna un valor al cuadrado mágico par

{

magic[y+dy][ x+dx]=i+nhsq*di;

if(i % (n / 2) == 0) //Hay un número en la esquina superior derecha

y++ ;

else if(y==0) //Cuando Cuando se excede el límite superior

x++,y=n/2-1;

else if (x == n / 2 - 1) //Cuando se excede el límite derecho

x=0,y--;

else //En circunstancias normales

x++,y--;

}

}

int nm;

nm=(n / 2 - 1) / 2;

for (j=1;j< nm+1;j++) //Intercambia los m números comenzando desde la segunda fila de A y D. J se refiere a la columna de la matriz

{

temp=magia[(n/2 )/2][j];

magia[(n/2)/2][j]= magic[(n/2+1)/2+n/2-1][j] ;//Da a la fila del medio en A, M números comenzando desde el segundo número (1/4 superior izquierdo) hasta D

>

magic[(n/2+1)/2+n/2-1][j]=temp; //Coloque M números (1/4 inferior izquierdo) en la fila central de D comenzando desde el segundo. número A

}

for (i=0;i

{

if(i==(n/2)/2) ////I me refiere a la fila de la matriz

continue; //Si se alcanza el número del medio, salir del bucle

for(j=0;j

{

temp = magic[i][j];

magia [i][j]=magia[n/2+i][j];

magia[n/2+i][j]=temp;

}

}

for (i=0;i

for (j =n-1;j>n-nm;j--)

{

temp=magic[i][j];

magia[i ][j]=magia[n/2+i][j];

magia[n/2+i][j]=temp;

}

}

void HF::operate()

{

system("cls");

cout << setw(45)<<"La producción del cuadrado mágico"<

cout <

cout <

cout <

cout <

cout <

cout <

int choice ;

cout<<"Por favor, introduzca su elección:";

cin>>choice;

if(choice==1)

{

aceptar(); //Llamar a los datos aceptados

if (n%2==0 | |n<=0)

cout < <"Error, ingresa un número impar positivo: "<

else

{

j

shf(); // Llamar al cálculo del cuadrado mágico factorial impar

display(); // Llamar al resultado de visualización

}

}

else if (choice == 2)

{

aceptar(); //Llamar a los datos aceptados

if(n== 2)

cout <<"2 cuadrado mágico no existe"<

else

{

if(n %2== 1 || n<=0)

cout <<"Error, ingresa un número par positivo:"<

else if (n%4 ==0)

{

souhf(); // Llamar al cálculo del cuadrado mágico factorial par

display() // Llamar a la pantalla resultado

}

else

{

dsouhf(); //Llamar al cálculo de cuadrados mágicos simples e pares factoriales

display(); //Llamar para mostrar resultados

}

}

}

else if ( elección==0)

cout <<"¡Esta ejecución ha finalizado! !"<

else

cout <<"Esta ejecución ha finalizado : El motivo es una entrada incorrecta"<

}

void HF::display() //Mostrar resultados

{

cout<

for(i=0;i

{

for(j=0;j

cout<

cout<

}

}

void main()

{

HF hf;

reproducción de caracteres;

replay='y';

p>

while (replay='y') //Operación en bucle

{

hf.operate( );

cout<

cin>>replay;

cout<

if(replay !='y')

return ;

}

}