写在前面
你好!欢迎来到我的博客,希望我的思路能够帮到你!
问题描述
以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
解题思路
借由这道题,给大家隆重介绍偏移量法!
所谓偏移量法,就是声明两个数组,一个用于代表x方向,一个代表y方向,用相同下标的一组坐标作为向量,指示当前的前进方向。具体我会在代码中介绍。
然后根据观察发现,n为奇或者偶时,输出的矩阵会有不同,我索性将奇偶分开讨论进行输出。
AC代码
#include<iostream>
using namespace std;
const int N=15;
int a[N][N];
int main()
{
int n;
cin>>n;
if(n%2==1)//n为奇数
{
//根据观察,n为奇数时最大的数字在右上角
//且逆时针进行旋转
//我们以x代表层数,x向下时为正,向上时为负
//y代表列数,y向左时为负,向右时为正
//dx和dy就是我们的方向数组
int dx[]={
0