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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了每日一练第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天:蛇形填数的主要内容,如果未能解决你的问题,请参考以下文章

每日一练第2天:3n+1问题

每日一练第5天:分数化小数

蛇形填数

蛇形填数

蛇形填数

蛇形填数