输出一个指定边长的正方形矩阵,矩阵内数值从中间螺旋形分布。
输入格式:
输入一行包含一个整数 n(2<=n<=20,并且n是偶数)。
输出格式:
长宽都为n的矩阵
输入样例:
4
输出样例:
10 9 8 7
11 2 1 6
12 3 4 5
13 14 15 16
参考了一些博主的写法,我用c++写的解题方法
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
cin >> n;
int a[n][n];
int fx=0;//方向
int cut;//层数
int num=n*n;//倒着写
int heng,zong;
for(cut=0;cut<n/2;cut++){
heng=n-1;
zong=n-1;
heng=(heng-cut);
zong=(zong-cut);
for(fx=0;fx<4;fx++){
switch(fx){
case 0:for(;num>=1&&zong>cut;zong--){
a[heng][zong]=num--;
//printf("a[%d][%d]=%d\n",heng,zong,num);
}break;
case 1:for(;num>=1&&heng>cut;heng--){
a[heng][zong]=num--;
//printf("a[%d][%d]=%d\n",heng,zong,num);
}break;
case 2:for(;num>=1&&zong<n-cut-1;zong++){
a[heng][zong]=num--;
//printf("a[%d][%d]=%d\n",heng,zong,num);
} break;
case 3:for(;num>=1&&heng<n-cut-1;heng++){
a[heng][zong]=num--;
//printf("a[%d][%d]=%d\n",heng,zong,num);
} break;
}
}
}
for(int i =0;i<n;i++){
for(int j=0;j<n;j++){
if(j<n-1)
printf("%-4d",a[i][j]);
else
printf("%-d",a[i][j]);
}
printf("\n");
}
}