打印螺旋矩阵
题目
如:输入 n = 5;
输出:
1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9
解题
这种规律打印题我个人感觉是真的不好写,一看答案感觉也就那回事,真自己琢磨,半天也没搞出来,😔
这道题我们首先要确定旋数m
若n为偶数,则m = n /2;
若n为奇数,则m = n / 2 + 1;
然后我们以m为轮次,里面写四个循环,分别控制:从左到右,从上到下,从右到左,从下到上的顺时针循环的赋值操作,每次结束循环的条件与n和当前所在旋数有关
#include<bits/stdc++.h>
using namespace std;
void printRes(int n) {
vector<vector<int>> nums(n, vector<int>(n));
int m, k = 1;
if(n % 2 == 0) m = n / 2;
else m = n / 2 + 1;
for(int i = 0; i < m; i++) {
for(int j = i; j < n - i; j++) //从左到右
nums[i][j] = k++;
for(int j = i+1; j < n - i; j++) //从上到下
nums[j][n-i-1] = k++;
for(int j = n-i-2; j > i; j--) // 从右到左
nums[n-i-1][j] = k++;
for(int j = n-i-1; j > i;j-- ) // 从下到上
nums[j][i] = k++;
}
for(int i = 0; i < n; i++) {
for(int j = 0; j < n; j++)
printf("%-3d", nums[i][j]);
cout << endl;
}
}
int main() {
int n;
cin >> n;
printRes(n);
return 0;
}
最后看看tui吧