请用c++编写这样一个程序:输入变量n,然后按照顺时针的方向打印n*n的数组
时间: 2024-03-24 08:41:19 浏览: 65
好的,下面是用C++编写的程序:
```c++
#include <iostream>
using namespace std;
int main() {
int n;
cout << "请输入n的值:";
cin >> n;
int a[n][n];
int num = 1; // 要打印的数字
int row = 0, col = 0; // 初始位置
int top = 0, bottom = n - 1, left = 0, right = n - 1; // 四个边界
while (num <= n * n) {
// 从左到右打印
for (int i = left; i <= right; i++) {
a[row][i] = num++;
}
top++; // 上边界下移
if (num > n * n) break;
// 从上到下打印
for (int i = top; i <= bottom; i++) {
a[i][right] = num++;
}
right--; // 右边界左移
if (num > n * n) break;
// 从右到左打印
for (int i = right; i >= left; i--) {
a[bottom][i] = num++;
}
bottom--; // 下边界上移
if (num > n * n) break;
// 从下到上打印
for (int i = bottom; i >= top; i--) {
a[i][left] = num++;
}
left++; // 左边界右移
}
// 打印数组
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
cout << a[i][j] << "\t";
}
cout << endl;
}
return 0;
}
```
程序的思路是按照顺时针的方向打印数字,然后存储到一个二维数组中,最后打印出来。具体的实现方法是,定义四个边界,初始时都为数组的边界,然后不断地从左到右、从上到下、从右到左、从下到上打印数字,每打印完一行或一列后更新相应的边界。当数字全部打印完毕后,再按照二维数组的形式打印出来。
阅读全文