//设置矩阵边界为40*40
//直接定义第一个数1,作为起点
/* (x-1>=0)和(y-1>=0) 不成立,即分别判断此时坐标在第一行或第一列。即到达边界。
要开始另一个方向的填充*/
//(y+1<40)和(x+1<40) 表明矩阵边界
//(!a[x-1][y+1])和(!a[x+1][y-1]) 表明不为零
#include<stdio.h>
int a[45][45];
int main() {
int x = 0, y = 0, tot,count=0;
tot = a[x][y] = 1;
while (tot < 40 * 40) {
while (x - 1 >= 0 && y + 1 < 40 && !a[x - 1][y + 1])//从左下到右上填充
a[--x][++y] = ++tot;
a[x][++y] = ++tot;// 到达边界,坐标向右移动一位
while (x + 1 < 40 && y - 1 >= 0 && !a[x + 1][y - 1])//从右上到左下填充
a[++x][--y] = ++tot;
a[++x][y] = ++tot;//到达边界,坐标向下移动一位
}
for (int i = 0; i <5; i++) {
for (int j = 0; j < 5; j++) {
printf("%d ", a[i][j]);
count++;
if(count%5==0)
printf("\n");
}
}
printf("%d", a[19][19]); //数组行列都是从0开始的 ,第20行20列在数组中是a[20-1][20-1];
return 0;
}
12-19
2万+
12-07
1754