http://pt.wikipedia.org/wiki/Quadrado_m%C3%A1gico
Este programa, feito em c, tem como objetivo gerar todos os quadrados mágicos possíveis na ordem [3,3].
Tentarei implementa-lo de um modo que faça os quadrados mágicos de quaisquer ordens. Fiz algumas tentativas, porém notei a necessidade de fazer uma função recursiva para gerar os "For's". Estudarei e postarei posteriormente.
Abaixo segue o programa, usei o compilador Dev C++:
#include <stdlib.h>
#include <stdio.h>
main()
{
int vet[8];
int vetpos[9];
int erro=0;
int erro2=0;
int g=0;
int n=9;
int quadrado=0;
for(vetpos[0]=1;vetpos[0]<=n;vetpos[0]++)
for(vetpos[1]=1;vetpos[1]<=n;vetpos[1]++)
for(vetpos[2]=1;vetpos[2]<=n;vetpos[2]++)
for(vetpos[3]=1;vetpos[3]<=n;vetpos[3]++)
for(vetpos[4]=1;vetpos[4]<=n;vetpos[4]++)
for(vetpos[5]=1;vetpos[5]<=n;vetpos[5]++)
for(vetpos[6]=1;vetpos[6]<=n;vetpos[6]++)
for(vetpos[7]=1;vetpos[7]<=n;vetpos[7]++)
for(vetpos[8]=0;vetpos[8]<n;vetpos[8]++){
/* if(vetpos[3]!=vetpos[2]&&vetpos[3]!=vetpos[1]&&vetpos[3]!=vetpos[0]&&vetpos[2]!=vetpos[1]&&
vetpos[2]!=vetpos[0]&&vetpos[1]!=vetpos[0])
{*/
for(int i=0;i<n;i++)
for(int j=1+i;j<n;j++){
if(vetpos[i]==vetpos[j])
erro++;
}
if(erro==0){
vet[0]=vetpos[0]+ vetpos[3]+ vetpos[6];
vet[1]=vetpos[1]+ vetpos[4]+ vetpos[7];
vet[2]=vetpos[2]+ vetpos[5]+ vetpos[8];
vet[3]=vetpos[0]+ vetpos[1]+ vetpos[2];
vet[4]=vetpos[3]+ vetpos[4]+ vetpos[5];
vet[5]=vetpos[6]+ vetpos[7]+ vetpos[8];
vet[6]=vetpos[0]+ vetpos[4]+ vetpos[8];
vet[7]=vetpos[6]+ vetpos[4]+ vetpos[2];
for(int i=0;i<n-1;i++)
for(int j=1+i;j<n-1;j++){
if(vet[i]!=vet[j])
erro2++;
}
if(erro2==0&&erro==0){
quadrado++;
printf("Quadrado Magico %d: \n\n", quadrado);
for(int i=0; i<n;i++){
printf("%d ", vetpos[i]);
if(i==2||i==5)
printf("\n\n");
if(i==8)
printf("\n\n\n\n");
}
}
/*g++;
printf("%d combinacao: ", g);
for(int i=0;i<n;i++)
printf("%d ", vetpos[i]);
printf("\n\n"); */
}
erro=0;
erro2=0;
//}
}
getchar(); getchar();
}
Segue a imagem da saída do programa, é necessário esperar um pouco pra obter a saída, pois são muitas combinações:
Quadrado Magico 1:
2 7 6
9 5 1
4 3 8
Quadrado Magico 2:
2 9 4
7 5 3
6 1 8
Quadrado Magico 3:
4 3 8
9 5 1
2 7 6
Quadrado Magico 4:
4 9 2
3 5 7
8 1 6
Quadrado Magico 5:
6 1 8
7 5 3
2 9 4
Quadrado Magico 6:
6 7 2
1 5 9
8 3 4
Quadrado Magico 7:
8 1 6
3 5 7
4 9 2
Quadrado Magico 8:
8 3 4
1 5 9
6 7 2
Até a próxima!
0 comentários:
Postar um comentário