C/Visual C - programa del cuadrado magico 4x4

 
Vista:

programa del cuadrado magico 4x4

Publicado por Misael (3 intervenciones) el 14/03/2003 14:04:14
necesito un programa de cuadrado magico 4 x 4, consiste en un programa donde los elementos verticales, horizontales y diagonales suma es igual, sin repetirse dicho elementos.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Generación de un cuadrado mágico 4x4 en C++

Publicado por Alejandro (1153 intervenciones) el 09/05/2025 20:22:40
Aquí tienes un programa en C++ que genera un cuadrado mágico de 4x4. Un cuadrado mágico esuna matriz donde la suma de los números en cada fila, columna y diagonal es la misma, y en este caso, los números del 1 al 16 se utilizan sin repetirse.

Código en C++



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
#include <iostream>
#include <vector>
 
using namespace std;
 
void printMagicSquare(const vector<vector<int>>& magicSquare) {
    for (const auto& row : magicSquare) {
        for (int num : row) {
            cout << num << "\t";
        }
        cout << endl;
    }
}
 
bool isMagicSquare(const vector<vector<int>>& magicSquare) {
    int magicSum = 0;
    for (int i = 0; i < 4; ++i) {
        magicSum += magicSquare[0][i]; // Suma de la primera fila
    }
 
    // Verificar filas
    for (int i = 0; i < 4; ++i) {
        int rowSum = 0;
        for (int j = 0; j < 4; ++j) {
            rowSum += magicSquare[i][j];
        }
        if (rowSum != magicSum) return false;
    }
 
    // Verificar columnas
    for (int i = 0; i < 4; ++i) {
        int colSum = 0;
        for (int j = 0; j < 4; ++j) {
            colSum += magicSquare[j][i];
        }
        if (colSum != magicSum) return false;
    }
 
    // Verificar diagonales
    int diag1Sum = 0, diag2Sum = 0;
    for (int i = 0; i < 4; ++i) {
        diag1Sum += magicSquare[i][i]; // Diagonal principal
        diag2Sum += magicSquare[i][3 - i]; // Diagonal secundaria
    }
 
    return (diag1Sum == magicSum && diag2Sum == magicSum);
}
 
int main() {
    vector<vector<int>> magicSquare(4, vector<int>(4, 0));
 
    // Llenar el cuadrado mágico de 4x4
    int num = 1;
    int i = 0, j = 2; // Comenzar en la primera fila, tercera columna
 
    while (num <= 16) {
        magicSquare[i][j] = num;
        num++;
 
        // Calcular la siguiente posición
        int newi = (i - 1 + 4) % 4; // Mover hacia arriba
 int newj = (j + 1) % 4; // Mover hacia la derecha
 
        if (magicSquare[newi][newj] != 0) { // Si la posición ya está ocupada
            i = (i + 1) % 4; // Mover hacia abajo
        } else {
            i = newi;
            j = newj;
        }
    }
 
    // Imprimir el cuadrado mágico
    cout << "Cuadrado mágico 4x4:\n";
    printMagicSquare(magicSquare);
 
    // Verificar si es un cuadrado mágico
    if (isMagicSquare(magicSquare)) {
        cout << "El cuadrado mágico es válido." << endl;
    } else {
        cout << "El cuadrado mágico no es válido." << endl;
    }
 
    return 0;
}

Explicación del código



1. Función `printMagicSquare`: Imprime el cuadrado mágico en la consola.
2. Función `isMagicSquare`: Verifica si el cuadrado generado es realmente un cuadrado mágico, comprobando que las sumas de filas, columnas y diagonales sean iguales.
3. Función `main`:
- Inicializa un cuadrado mágico de 4x4.
- Llena el cuadrado mágico utilizando el método de Siamés, que es un algoritmo común para generar cuadrados mágicos de orden impar.
- Imprime el cuadrado mágico y verifica su validez.

Ejecución



Al ejecutar este programa, deberías ver un cuadrado mágico de 4x4 en la consola, donde la suma de cada fila, columna y diagonal es igual a 34, que es la suma mágica para un cuadrado de 4x4 utilizando los números del 1 al 16.

¡Espero que esto te ayude, Misael!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar