题目描述:
给定一个 n , 在 n * n 的方阵中填入 1 ,2, 3,……,n * n, 要求填成蛇形。
例如在 n = 5 时 , 如下所示:
13 14 15 16 1
12 23 24 17 2
11 22 25 18 3
10 21 20 19 4
9 8 7 6 5
思路:
设置一个二维数组, 以 x 代表行, y 代表列
填数的顺序是 下, 左, 上, 右
直到一个方向无法再填数时,再进行下一个方向的填数
具体代码:
#include <stdio.h>
#include <string.h>
int main()
{
int n;
int a[101][101];
int sum; //计数
int i,j;
while(~scanf("%d", &n))
{
sum = 0;
int x = 0, y = n - 1; // 代表 行列
memset(a, 0, sizeof(a)); //将数组清零
a[x][y] = ++sum; //填入第一个数 :1
while(sum < n * n)
{
while(x + 1 < n && !a[x + 1][y]) // !a[x + 1][y] 代表这个区域未有数填入,区域依然为0
{
a[++x][y] = ++sum;
}
while(y - 1 >= 0 && !a[x][y - 1])
{
a[x][--y] = ++sum;
}
while(x - 1 >= 0 && !a[x - 1][y])
{
a[--x][y] = ++sum;
}
while(y + 1 < n && !a[x][y + 1])
{
a[x][++y] = ++sum;
}
}
for(i = 0; i < n; i++)
{
for(j = 0; j < n; j++)
{
printf("%5d", a[i][j]);
}
printf("\n");
}
}
}