凉刃最近在研究螺旋矩阵, 凉刃发现一种方式可以让螺旋矩阵变得美丽, 那就是螺旋矩阵每换一次方向才+1,刚开始为1 为了使螺旋矩阵更美丽,凉刃还有一个要求,就是每个数向左对齐,占用4个位置(输出时候用%-4d) 输入 输入一个整数n 1<=n<=100 输出 n*n的图形, 用c语言或者c++实现
时间: 2024-04-14 20:27:17 浏览: 19
以下是用C++实现的代码示例,可以生成按要求美化的螺旋矩阵:
```cpp
#include <iostream>
#include <iomanip>
#include <vector>
using namespace std;
vector<vector<int>> generateSpiralMatrix(int n) {
vector<vector<int>> matrix(n, vector<int>(n, 0));
int num = 1; // 螺旋矩阵中的数字
int rowStart = 0, rowEnd = n - 1;
int colStart = 0, colEnd = n - 1;
int direction = 0; // 0表示向右,1表示向下,2表示向左,3表示向上
while (num <= n * n) {
// 向右
if (direction == 0) {
for (int i = colStart; i <= colEnd; i++) {
matrix[rowStart][i] = num++;
}
rowStart++;
}
// 向下
else if (direction == 1) {
for (int i = rowStart; i <= rowEnd; i++) {
matrix[i][colEnd] = num++;
}
colEnd--;
}
// 向左
else if (direction == 2) {
for (int i = colEnd; i >= colStart; i--) {
matrix[rowEnd][i] = num++;
}
rowEnd--;
}
// 向上
else if (direction == 3) {
for (int i = rowEnd; i >= rowStart; i--) {
matrix[i][colStart] = num++;
}
colStart++;
}
direction = (direction + 1) % 4; // 切换方向
}
return matrix;
}
int main() {
int n;
cout << "请输入一个整数n(1<=n<=100):";
cin >> n;
vector<vector<int>> spiralMatrix = generateSpiralMatrix(n);
cout << "生成的螺旋矩阵:" << endl;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
cout << setw(4) << left << spiralMatrix[i][j];
}
cout << endl;
}
return 0;
}
```
上述代码中,我们首先定义了一个函数`generateSpiralMatrix`,用于生成美化的螺旋矩阵。然后在`main`函数中,通过用户输入的整数n调用该函数生成螺旋矩阵,并按要求输出。注意,我们使用了`<iomanip>`头文件中的`setw`和`left`函数,以使输出的每个数向左对齐并占用4个位置。
请注意,这只是实现螺旋矩阵的一种方式,可能不是最优解,但可以满足你的要求。你可以尝试在此基础上进行优化或自定义逻辑。