//每次只打印一条斜线,打印一条换个方向打印
//方向相反的时候只是行列下标兑换一下就可以
//给自己定个小目标,以后尽量多使用动态内存,而不是变长数组
#include<stdio.h>
int main()
{
int n,i,j,count=1;
scanf("%d",&n);
int arr[n][n];
for(i=0;i<n*2;i++)//增加和减少通用
{
for(j=0;j<=i;j++)// 顶角位置行列号是相同的
{
if(i-j<n && j < n )//行号 列号都不可能超过输入数
{
if(i%2) //一个循环代表一种方向
{
arr[j][i-j]=count++; //左下移动 行增加 列减少
}
else
{
arr[i-j][j]=count++;//右上移动 行减少 列增加
}
}
}
}
//打印
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
printf("%d ",arr[i][j]);
}
printf("\n");
}
return 0;
}

京公网安备 11010502036488号