
#include<iostream>
#include<vector>
#include<iomanip>
using namespace std;
vector<vector<int>> cf(int n)
{
vector<vector<int>> arr(n, vector<int>(n));//用 vector<vector<int>> arr(n, vector<int>(n)) 直接创建 n x n 的二维向量,避免越界。
int top = 0, bottom = n - 1, left = 0, right = n - 1;
int num = 1;
while (num <= n * n)
{
for (int i = left; i <= right; i++)
{
arr[top][i] = num++;
}
top++;
for (int i = top; i <= bottom; i++)
{
arr[i][right] = num++;
}
right--;
for (int i = right; i >= left; i--)
{
arr[bottom][i] = num++;
}
bottom--;
for (int i = bottom; i >= top; i--)
{
arr[i][left] = num++;
}
left++;
}
return arr;
}
int main()
{
int n;
cin >> n;
vector<vector<int>> arr1 = cf(n);
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
cout << setw(3) << setfill(' ') << arr1[i][j] << " ";
}
cout << endl;
}
return 0;
}
本人是新手,若有更好的方法大佬请指教。
8793

被折叠的 条评论
为什么被折叠?



