题目描述
在大小为nn的方阵里填入1,2,3…nn,要求填成蛇形,例如n=4时方阵为:
10 11 12 1
9 16 13 2
8 15 14 3
7 6 5 4
方法
#include<stdio.h>
int main()
{
int a[20][20];
int x = 0, y, n, t = 1;
scanf_s("%d", &n);
memset(a, 0, sizeof(a)); //将二维数组的所有元素都初始化为0
a[x=0][y = n - 1] = 1;
while (t < n * n)
{
while (x < n - 1 && (a[x + 1][y] == 0))
a[++x][y] = ++t; //递增行数x
while (y >= 1 && a[x][y - 1] == 0)
a[x][--y] = ++t; //递减列数y
while (x >= 1 && a[x-1][y] == 0)
a[--x][y] = ++t; //递减行数x
while (y < n - 1 && a[x][y + 1] == 0)
a[x][++y] = ++t; //递增列数y
}
for (x = 0; x < n; x++)
{
for (y = 0; y < n; y++)
printf("%3d", a[x][y]);
printf("\n");
}
return 0;
}
总结
该算法的难度在于多个while循环,需要仔细分析内在的逻辑关系。