螺旋数字正方形
题目描述
打印螺旋数字正方形
输入描述
输入一个整数n,1<=n<=31
输出描述
输出数字正方形。
注意,每个数字占4个字符,右对齐,不全则补足空格;
样例输入
10
样例输出
1 2 3 4 5 6 7 8 9 10
36 37 38 39 40 41 42 43 44 11
35 64 65 66 67 68 69 70 45 12
34 63 84 85 86 87 88 71 46 13
33 62 83 96 97 98 89 72 47 14
32 61 82 95 100 99 90 73 48 15
31 60 81 94 93 92 91 74 49 16
30 59 80 79 78 77 76 75 50 17
29 58 57 56 55 54 53 52 51 18
28 27 26 25 24 23 22 21 20 19
解答:
#include <iostream>
#include <iomanip>
#include <vector>
using namespace std;
//matrix:螺旋矩阵 (x,y)第一个元素的坐标 start为第一个元素的值 n为矩阵的大小
void setMatrix(int **matrix, int x, int y, int start, int n){
if(n<=0)
return;
if(n==1){
matrix[x][y] = start;
return;
}
//上边
for(int j=y; j<n+y-1; ++j){
matrix[x][j] = start++;
}
//右边
for(int i=x; i<x+n-1; ++i){
matrix[i][x+n-1] = start++;
}
//下边
for(int j=n+y-1; j>y; --j){
matrix[n+x-1][j] = start++;
}
//左边
for(int i=x+n-1; i>x; --i){
matrix[i][y] = start++;
}
//递归
setMatrix(matrix, x+1, y+1, start, n-2);
}
int main(){
int n;
cin >> n;
int **matrix = new int*[n]; //螺旋矩阵(二维数组)分配空间
for (int i = 0; i<n; i++){
matrix[i] = new int[n];
}
setMatrix(matrix, 0, 0, 1, n);
//打印螺旋矩阵
for(int i = 0; i < n; i++) {
for (int j = 0; j < n; j++)
cout << setw(4) << matrix[i][j];
cout << endl;
}
return 0;
}