蛇形填数。在n×n方阵里填入1,2,…,n×n,要求填成蛇形。
例如,n=4时方阵为:
10 11 12 19 16 13 28 15 14 37 6 5 4
解决此题的一个重要原则就是先判断下一个要填的位置是否满足条件,再填数。不是发现了不能填再退回来。
代码如下:
#include <stdio.h>
#include <string.h>
#define MAXN 100
int matrix[MAXN][MAXN];int main()
{int n;while(1 == scanf("%d", &n)){memset(matrix, 0, sizeof(matrix)); // 先将矩阵全部置为0int x = 0, y = n - 1; // 从右上角开始填数int ct = matrix[x][y] = 1; // 右上角第一个数填1while(ct != n * n) // 填剩下的数,原则是先判断下一个要填的位置是否超出边界和是否为0,再填数{while(x + 1 < n && !matrix[x+1][y]) matrix[++x][y] = ++ct; // 由上倒下while(y - 1 >= 0 && !matrix[x][y-1]) matrix[x][--y] = ++ct; // 由右到左while(x - 1 >= 0 && !matrix[x-1][y]) matrix[--x][y] = ++ct; // 由下到上while(y + 1 < n && !matrix[x][y+1]) matrix[x][++y] = ++ct; // 由左到右}for(x = 0; x < n; ++x) // 输出填好的矩阵{for(y = 0; y < n; ++y)printf("%3d ", matrix[x][y]);putchar('n');}}return 0;
}
本文发布于:2024-01-29 14:21:28,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170650929315889.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |