有一种方阵被称为“魔幻方阵”。所谓魔幻方阵是指n*n的矩阵中填写1-n*n这n*n个数字,使得它的每一行,每一列以及两个对角线之和均相等。编写程序进行求解。
遇到这样的问题,我们最容易想到的是采用穷举法,一个一个的去测试。下面给出的代码是3*3的,代码如下:
- #include <stdio.h>
-
-
int match(int i, int j, int k, int l, int m, int n, int o, int p, int q)
-
{
-
if(i!=j && i!=k && i!=l && i!=m && i!=n && i!=o && i!=p && i!=q && j!=k && j!=l && j!=m && j!=n && j!=o && j!=p && j!=q && k!=l && k!=m && k!=n && k!=o && k!=p && k!=q && l!=m && l!=n && l!=o && l!=p && l!=q && m!=n && m!=o && m!=p && m!=q && n!=o && n!=p && n!=q && o!=p && o!=q && p!=q)
-
return 1;
-
else
-
return 0;
-
}
-
-
int justic(int i, int j, int k ,int l, int m, int n, int o, int p, int q)
-
{
-
if(i+j+k==l+m+n && i+j+k==o+p+q && i+l+o==j+m+p && i+l+o==k+n+q && i+m+q==k+m+o)
-
return 1;
-
else
-
return 0;
-
}
-
-
void getMatrix()
-
{
-
int i,j,k,l,m,n,o,p,q;
-
for(i=1;i<=9;i++)
-
for(j=1;j<=9;j++)
-
for(k=1;k<=9;k++)
-
for(l=1;l<=9;l++)
-
for(m=1;m<=9;m++)
-
for(n=1;n<=9;n++)
-
for(o=1;o<=9;o++)
-
for(p=1;p<=9;p++)
-
for(q=1;q<=9;q++)
- {
-
if(match(i,j,k,l,m,n,o,p,q))
-
if(justic(i,j,k,l,m,n,o,p,q)){
- printf("%d %d %d\n",i,j,k);
- printf("%d %d %d\n",l,m,n);
- printf("%d %d %d\n",o,p,q);
- return;
-
}
-
}
-
}
-
-
int main(int argc, char *argv[])
-
{
-
getMatrix();
-
return 0;
-
}
执行结果如下:
peng@ubuntu:~/src/test/c/suanfa/miaoqu$ ./a.out
2 7 6
9 5 1
4 3 8
阅读(2678) | 评论(0) | 转发(0) |