#include
void main()
{
int n;
int i,j; //i为行,j为列
int k; //k为临时的列数
printf("请输入矩阵的阶数N:\n");
scanf("%d",&n);
int a[50][50];
for(i=0;i
for(j=0;j
}
// int * *a;
// a=new int[n][n];//a[i-1][j-1]为存储第i行第j列的数
//把矩阵可作多个圈
int first=1; //first为圈的第一个数
//第i圈有4(n-i)个数
//同一个圈对角之和为常数
//所以只要先求左上半圈就好办了
int sum;//对角的和
for(i=1;i
a[i-1][n-i]=first;//每个圈的第一个数
for(j=i-1;j
//上面的三角形。把下面的注释去掉,就可以知道怎么回事了
if(i==1)
first=4*n-3;
else first+=4*(n-2*i+1);
}
/*
for(i=0;i
for(j=0;j
printf("\n");printf("\n");
}printf("\n");printf("\n");printf("\n");
*/
for(i=1;i
a[k][i-1]=a[i-1][i-1]+k-(i-1);
/*
for(i=0;i
for(j=0;j
printf("\n");printf("\n");
}printf("\n");printf("\n");printf("\n");
*/
k=k-1;
for(i=1;i
for(j=i-1;j<=n-i;j++)//在下一半的行
{
a[n-i][j]=a[n-i][i-1]-(i-1)+j;
}
for(j=i;j<=n-i;j++)
{ //列
a[j][n-i]=a[n-i][n-i]+(n-i)-j;
}
}
//输出:
for(i=0;i
for(j=0;j
printf("\n");printf("\n");
}
}