题目:
思路:
以三阶为例:
转化成数组就是:
a[0][0] a[0][1] a[0][2]
a[1][0] a[1][1] a[1][2]
a[2][0] a[2][1] a[2][2]
规律:
从左到右 a[0][0] a[0][1] a[0][2]
行不变 列加一,列最大为 阶数-1
从上到下 a[1][2]
a[2][2]
列不变 行加一,行最大为 阶数-1
从右到左a[2][0] a[2][1] a[2][2]
行不变 列减一,列最小为 0
从下到上 a[1][0]
一个螺旋结束
下一个螺旋 a[1][1]
对于1,2阶矩阵,一次螺旋
对于3,4阶矩阵,二次螺旋
所以螺旋次数=阶数/2;
对于二阶以上的矩阵,一次螺旋结束后,
继续重复即可
最后遍历输出;
代码:
#include <iostream>
#include<vector>
using namespace std;
int main()
{
int N;
int n, i, j, m = 1;
//N阶数,n循环次数,i行,j列,m插入的数据
while (cin >> N) {
vector<vector<int>> a(N, vector<int>(N));
for (n = 0; n <= N / 2; n++)
{
for (j = n; j < N - n; j++) {//左
a[n][j] = m++;
}
for (i = n + 1; i < N - n; i++) {//下
a[i][N - n - 1] = m++;
}
for (j = N - n - 2; j >= n; j--) {//右
a[N - n - 1][j] = m++;
}
for (i = N - n - 2; i > n; i--) {//上
a[i][n] = m++;
}
}
for (i = 0; i < N; i++)
{
for (j = 0; j < N; j++)
printf("%4d", a[i][j]);
printf("\n");
}
}
}