给定一个nxn阶矩阵,如何判断是否幻方。所谓幻方的定义是nxn阶矩阵的每行,每列,对角线之和相等;
如下图所示:
现在的问题是给定一个nxn阶矩阵,如何决断是否幻方?
代码显示:
#include <stdio.h> #include <stdlib.h> int main() { int table[4][4]={{16,2,3,13},{5,11,10,8},{9,7,6,12},{4,14,15,1}}; int colsum[4]={0},rowsum[4]={0},diagsum=0,tmpsum=0; int i=0,j=0; for(i=0;i<4;i++) { for(j=0;j<4;j++) { colsum[i]+=table[j][i]; rowsum[i]+=table[i][j]; if(i+j==3) { diagsum+=table[i][j]; } if(i==j) { tmpsum+=table[i][j]; } } } for(i=0;i<4;i++) { printf("colsum[%d]:%d\n",i,colsum[i]); printf("rowsum[%d]:%d\n",i,rowsum[i]); printf("diagsum:%d\n",diagsum); printf("tmpsum:%d\n",tmpsum); } return 1; }
在处理过程中遇到一个问题,那就是如果定义数给,没有指定数组大小,但是有初始化。那个数组的大小就为初始化的大小.
如上黑体部分显示:rowsum[]={0}, 那么这个数组就是一维的。
关于如何构造幻方,最后归结为数学问题。就不研究了.