首页 > 代码库 > 每日一练第7天:蛇形填数

每日一练第7天:蛇形填数

蛇形填数。在n×n方阵里填入1,2,...,n×n,要求填成蛇形。

例如,n=4时方阵为:

10 11 12  1

  9 16 13  2

  8 15 14  3

  7   6   5  4

 

解决此题的一个重要原则就是先判断下一个要填的位置是否满足条件,再填数。不是发现了不能填再退回来。

代码如下:

 1 #include <stdio.h>
 2 #include <string.h>
 3 #define MAXN 100
 4 int matrix[MAXN][MAXN];
 5 
 6 int main()
 7 {
 8     int n;
 9     while(1 == scanf("%d", &n))
10     {
11         memset(matrix, 0, sizeof(matrix));  // 先将矩阵全部置为0
12         int x = 0, y = n - 1;               // 从右上角开始填数
13         int ct = matrix[x][y] = 1;          // 右上角第一个数填1
14         while(ct != n * n)                  // 填剩下的数,原则是先判断下一个要填的位置是否超出边界和是否为0,再填数
15         {
16             while(x + 1 < n  && !matrix[x+1][y]) matrix[++x][y] = ++ct;     // 由上倒下
17             while(y - 1 >= 0 && !matrix[x][y-1]) matrix[x][--y] = ++ct;     // 由右到左
18             while(x - 1 >= 0 && !matrix[x-1][y]) matrix[--x][y] = ++ct;     // 由下到上
19             while(y + 1 < n  && !matrix[x][y+1]) matrix[x][++y] = ++ct;     // 由左到右
20         }
21         for(x = 0; x < n; ++x)      // 输出填好的矩阵
22         {
23             for(y = 0; y < n; ++y)
24                 printf("%3d ", matrix[x][y]);
25             putchar(\n);
26         }
27     }
28     return 0;
29 }

 

每日一练第7天:蛇形填数