问题:

在n*n的矩阵中填写1~n*n这n*n个数字。使得它的每一行、每一列以及两个对角线之和均相等。求出一个这样的三阶魔幻方阵

最简单,效率最低的穷举法可以解。

源码:

#include <stdio.h>
   2:  
int q)
   4: {
/*判断变量i-q是否互不相等,是则返回1,不是则返回0*/
if(i!=j&&i!=k&&i!=l&&i!=m&&i!=n&&i!=o&&i!=p&&i!=q
   7:          &&j!=k&&j!=l&&j!=m&&j!=n&&j!=o&&j!=p&&j!=q
   8:             &&k!=l&&k!=m&&k!=n&&k!=o&&k!=p&&i!=q
   9:                     &&l!=m&&l!=n&&l!=o&&l!=p&&l!=q
  10:                      &&m!=n&&m!=o&&m!=p&&m!=q
  11:                               &&n!=o&&n!=p&&n!=q
  12:                                      &&o!=p&&o!=q
  13:                                           &&p!=q)
return 1 ;
return 0;
  16: }
  17:  
  18:  
int q)
  20: {
/*判断变量i-q的这种排列是否满足魔幻方阵的要求,满足返回1,不满足返回0*/
if(i+j+k == l+m+n && i+j+k == o+p+q &&
  23:     i+l+o == j+m+p && i+l+o == k+n+q
return 1;
return 0;
  26: }
  27:  
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++)
  39:                                      {
if(match(i,j,k,l,m,n,o,p,q))
if(justic(i,j,k,l,m,n,o,p,q))
  42:                                         {
/*输出结果*/
,l,m,n);
,o,p,q);
);
return;
/*返回*/
  49:                                      }
  50:  
  51: }
  52:  
int main()
  54: {
/*输出一个三阶魔幻方阵*/
return 0;
  57: }
  58:  

相关文章: