【问题描述】
以1为中心,用2,3,4, ..., n, ..., n*n的数字围绕着中心输出数圈, 如若n=4,则
7 8 9 10
6 1 2 11
5 4 3 12
16 15 14 13
【输入形式】
一个整数n(1<=n<=10)
【输出形式】
数圈矩阵
【样例输入】
5
【样例输出】
21 22 23 24 25 20 7 8 9 10 19 6 1 2 11 18 5 4 3 12 17 16 15 14 13
感悟:这题题目简单,但实现起来还是有点难的,最后借鉴了大佬的代码,实现了一遍最后才明白。感谢大佬。
#include<bits/stdc++.h>
using namespace std;
int main() {
int n;
cin>>n;
int arr[n][n];
int pos;
if(n%2==0) pos=n/2-1;
else pos=n/2;
int left,right;
left=right=pos;//从1开始
arr[pos][pos]=1;
for(int i=2,temp=1; i<=n*n; temp++) {
if(temp%2==1) { //temp为奇数 这个循环是向右下走
for(int k=0; k<temp&&i<=n*n; k++) arr[left][++right]=i++;//往右走
for(int k=0; k<temp&&i<=n*n; k++) arr[++left][right]=i++;//变方向,往下走
}
else { //temp为偶数,这个循环是往左上走
for(int k=0; k<temp&&i<=n*n; k++) arr[left][--right]=i++;//往左走
for(int k=0; k<temp&&i<=n*n; k++) arr[--left][right]=i++;//变方向,往上走
}
}
for(int i=0; i<n; i++) { //输出数组
for(int j=0; j<n; j++)
cout<<arr[i][j]<<' ';
cout<<endl;
}
return 0;
}