#include <iostream> #include <iomanip> #define X 10 using namespace std; int main() { int n; int a[X][X] = {0}; // 初始化为0 cin >> n; int num = 1, x = 0, y = 0; while (num <= n * n) { // 向右走 while (y < n && !a[x][y]) { a[x][y++] = num++; } y--, x++; // 向下走 while (x < n && !a[x][y]) { a[x++][y] = num++; } x--, y--; // 向左走 while (y >= 0 && !a[x][y]) { a[x][y--] = num++; } y++, x--; // 向上走 while (x >= 0 && !a[x][y]) { a[x--][y] = num++; } x++, y++; } // 输出结果 for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { cout << "**" << setw(2) << setfill('*') << (a[i][j] == 0 ? "" : to_string(a[i][j])) << flush; if (a[i][j]==n*n){cout<<setw(2)<<setfill('*')<<flush; } } cout << endl; } return 0; }这个也是一个蛇形填数但是挡到100的时候会出现不对齐应该怎么解决这个问题
时间: 2024-01-21 14:01:51 浏览: 69
你可以使用 `setfill()` 和 `setw()` 函数来控制输出的格式,使得数字对齐。具体来说,`setfill()` 函数是设置填充字符,`setw()` 函数是设置输出宽度。以下是修改后的代码:
```cpp
#include <iostream>
#include <iomanip>
#define X 10
using namespace std;
int main() {
int n;
int a[X][X] = {0}; // 初始化为0
cin >> n;
int num = 1, x = 0, y = 0;
while (num <= n * n) {
// 向右走
while (y < n && !a[x][y]) {
a[x][y++] = num++;
}
y--, x++;
// 向下走
while (x < n && !a[x][y]) {
a[x++][y] = num++;
}
x--, y--;
// 向左走
while (y >= 0 && !a[x][y]) {
a[x][y--] = num++;
}
y++, x--;
// 向上走
while (x >= 0 && !a[x][y]) {
a[x--][y] = num++;
}
x++, y++;
}
// 输出结果
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
cout << setw(3) << setfill(' ') << (a[i][j] == 0 ? "" : to_string(a[i][j])) << " ";
}
cout << endl;
}
return 0;
}
```
在输出数字之前,使用 `setw(3)` 来设置输出宽度为3个字符,使用 `setfill(' ')` 来设置填充字符为空格,这样就可以保证数字对齐了。
阅读全文