c++给你一个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)。 输出 输出符合题意的螺旋阵。
时间: 2024-01-02 21:05:15 浏览: 88
下面是C++的实现代码:
```
#include <iostream>
using namespace std;
const int MAXN = 100;
int matrix[MAXN][MAXN];
// 定义方向常量
const int RIGHT = 0, DOWN = 1, LEFT = 2, UP = 3;
int main() {
int n;
cin >> n;
// 初始化变量
int row = 0, col = 0, direction = RIGHT, num = 1;
// 填充螺旋阵
while (num <= n * n) {
matrix[row][col] = num;
num++;
// 根据方向更新行列值
if (direction == RIGHT) {
if (col < n - 1 && matrix[row][col + 1] == 0) {
col++;
} else {
row++;
direction = DOWN;
}
} else if (direction == DOWN) {
if (row < n - 1 && matrix[row + 1][col] == 0) {
row++;
} else {
col--;
direction = LEFT;
}
} else if (direction == LEFT) {
if (col > 0 && matrix[row][col - 1] == 0) {
col--;
} else {
row--;
direction = UP;
}
} else if (direction == UP) {
if (row > 0 && matrix[row - 1][col] == 0) {
row--;
} else {
col++;
direction = RIGHT;
}
}
}
// 输出螺旋阵
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
cout << matrix[i][j] << " ";
}
cout << endl;
}
return 0;
}
```
希望对您有帮助!
阅读全文