#include <stdio.h>
#define N 5
int main()
{
int i,j,k=1;
int q[N][N]={0};
for(i=0;i<N;i++){ //上半边
if(i%2==1) //讨论向上还是向下
for(j=i;j>=0;j--){ //向下递增
q[i-j][j]=k;
k++;
}
else
for(j=i;j>=0;j--){ //向上递增
q[j][i-j]=k;
k++;
}
}
if(N%2) //判断
{
for(i=1;i<N;i++){ //奇数下半边 ,正常赋值
if(i%2==1)
for(j=N;j>i;j--){
q[i+N-j][j-1]=k;
k++;
}
else
for(j=i;j<N;j++){
q[N+i-j-1][j]=k;
k++;
}
}
}
else{ //偶数下半边 ,改变赋值方法
int k1=N*N; // 从右下顶点开始赋值
for(i=N-1;i>0;i--){
if(i%2==1)
for(j=N;j>i;j--){
q[i+N-j][j-1]=k1;
k1--;
}
else
for(j=i;j<N;j++){
q[N+i-j-1][j]=k1;
k1--;
}
}
}
for(i=0;i<N;i++){ //输出
for(j=0;j<N;j++){
printf("%4d",q[i][j]);
}
putchar(10);
putchar(10);
}
return 0;
}
N为5(奇)时:
N为6(偶)时: