在n宫格中填入1-n^2(n为奇数)使得每行,每列,对角线的和都相等。
#include<stdio.h>
#define N 100
int s[N][N];
int main()
{
int n,i,j,h,l,x,y;
printf("请输入N(奇数):\n");
scanf("%d",&n);
if(n%2==0)
{
printf("N 不是奇数!\n");
return 0;
}
//1放在第一行的中间
h=0;
l=n/2;
s[h][l]=1;
/**
下一位放在上一行的下一列,若上一行的下一列已经有数字(!=0)
则下一位放在下一环的这一列
**/
for(i=1;i<n*n;i++)
{
x=(h+n-1)%n;//上一行
y=(l+1)%n;//下一列
if(s[x][y]==0)
{
s[x][y]=i+1;
h=x;
l=y;
}
else
{
h=(h+1)%n;//下一行
s[h][l]=i+1;
}
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
printf("%-3d ",s[i][j]);//左对齐输出
//右对齐输出为 printf("%3d ",s[i][j]);
printf("\n");
}
return 1;
}