打印螺旋矩阵
题目
如:输入 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吧