Programa
para verificar um quadrado mágico 8x8, solução incompleta (falta verificar a
unicidade dos elementos).
#include <stdio.h>
#include <stdlib.h>
#define TRUE 1
#define FALSE 0
#define N 8
#define CM N*(N*N+1)/2
int QMvalido(int q[][8]){
int i,j;
int acum;
for(i=0; i<8; i++){
acum=0;
for(j=0; j<8; j++)
acum+=q[i][j];
if(acum!=CM){
printf("Linha %d não totaliza
%d\n", i, CM);
return FALSE;
}
acum=0;
for(j=0; j<8; j++)
acum+=q[j][i];
if(acum!=CM){
printf("Coluna %d não totaliza
%d\n", i, CM);
return FALSE;
}
}
acum=0;
for(i=0; i<8; i++)
acum+=q[i][i];
if(acum!=CM){
printf("Diagonal Principal não
totaliza %d\n",CM);
return FALSE;
}
acum=0;
for(i=0; i<8; i++)
acum+=q[i][7-i];
if(acum!=CM){
printf("Diagonal secundaria não
totaliza %d\n", CM);
return FALSE;
}
return TRUE;
}
int main(int argc, char *argv[])
{
int qm[8][8]={{64, 2, 3,61,60, 6,
7,57},
{
9,55,54,12,13,51,50,16},
{17,47,46,20,21,43,42,24},
{40,26,27,37,36,30,31,33},
{32,34,35,29,28,38,39,25},
{41,23,22,44,45,19,18,48},
{49,15,14,52,53,11,10,56},
{ 8,58,59, 5, 4,62,63,
1}};
if(QMvalido(qm))printf("Quadrado
magico ok!\n");
system("PAUSE");
return 0;
}