首页 > 代码库 > 每日一练第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天:蛇形填数
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。