题目描述 给你一个N行N列的方格矩阵,从外圈按顺时针依次填写自然数,这会构成一个螺旋阵,你能编程实现吗? 比如5行5列的情况如下: 1 2 3 4 5 16 17 18 19 6 15 24 25 20 7 14 23 22 21 8 13 12 11 10 9 输入 输入一个正整数数N(N<100)。 输出 输出符合题意的螺旋阵。 样例输入 复制 5 样例输出 复制 1 2 3 4 5 16 17 18 19 6 15 24 25 20 7 14 23 22 21 8 13 12 11 10 9使用c++语言
时间: 2024-01-03 20:04:57 浏览: 93
螺旋矩阵 C++实现
可以先定义一个二维数组来存储矩阵,然后按照螺旋阵的规则依次填入自然数。具体地,我们可以定义四个变量 `top`、`bottom`、`left` 和 `right` 分别表示当前螺旋阵的上下左右边界,初始值分别为 0、n-1、0 和 n-1。然后我们从左到右、从上到下、从右到左、从下到上四个方向依次填入自然数,直到填满整个矩阵。
以下是一个参考实现:
```c++
#include <iostream>
#include <cstring>
using namespace std;
const int N = 110;
int a[N][N];
int main() {
int n;
cin >> n;
memset(a, 0, sizeof a);
int cnt = 1, top = 0, bottom = n - 1, left = 0, right = n - 1;
while (cnt <= n * n) {
// 从左到右
for (int j = left; j <= right; j++) {
a[top][j] = cnt++;
}
top++;
// 从上到下
for (int i = top; i <= bottom; i++) {
a[i][right] = cnt++;
}
right--;
// 从右到左
for (int j = right; j >= left; j--) {
a[bottom][j] = cnt++;
}
bottom--;
// 从下到上
for (int i = bottom; i >= top; i--) {
a[i][left] = cnt++;
}
left++;
}
// 输出矩阵
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
cout << a[i][j] << ' ';
}
cout << endl;
}
return 0;
}
```
这个实现中,我们首先定义一个二维数组 `a` 来存储矩阵。然后我们定义四个变量 `top`、`bottom`、`left` 和 `right` 来表示当前螺旋阵的上下左右边界,初始值分别为 0、n-1、0 和 n-1。接下来我们使用一个循环来不断填入自然数,直到填满整个矩阵。
在循环中,我们依次按照从左到右、从上到下、从右到左、从下到上四个方向填入自然数。在每个方向上,我们都使用一个循环来遍历当前方向上的所有位置,并填入自然数。填入自然数之后,我们需要更新当前螺旋阵的边界,以便下一轮循环使用。
最后,我们输出矩阵即可。
阅读全文