void main()
{
int a[16][16],i,j,k,n;
printf("enter n(n=1 to 15):");
scanf("%d",&n);
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
a[i][j]=0; //壹定要初始化數組,不然就輸不出結果
if(j=n/2+1)
a[1][j]=1;
for(k=2;k<=n*n;k++)
{
i=i-1; //先寫出壹般規律
j=j+1;
if((i<1)&&(j>n)) //第壹行最後壹個元素,其下壹個元素直接放在它的下面
{
i=i+2;
j=j-1;
}
else
{
if(i<1) //到了第壹行,則其下壹個元素在第n行
i=n;
if(j>n) //到了最後壹列,則下壹個元素轉到第壹列
j=1;
}
if(a[i][j]==0) //如果下壹個元素還沒有被填充,已定的規律由大到小的順序進行輸出
a[i][j]=k;
else
{
i=i+2; //由於原來i減去了1,所以現在要加上1,總***要回去2
j=j-1; //由於原來j加上了1,所以現在要減去1
a[i][j]=k;
}
}
for(i=1;i<=n;i++) //矩陣的輸入模塊
{
for(j=1;j<=n;j++)
printf("%5d",a[i][j]);
printf("\n");
}
}