【问题描述】
以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<iostream>
#include<vector>
using namespace std;
int main()
{
//1.输入
int n; cin >> n;
int w = 1;//记录当前走到的矩阵大小,也是每个方向走的次数
int i, j;//记录当前位置
int num=1;//记录当前数字
i = j = (n - 1) / 2;
vector<vector<int>>add;
for (int i = 0; i < n; i++)
{
vector<int >add0;
for (int j = 0; j < n; j++)
{
add0.push_back(0);
}
add.push_back(add0);
}
//2.从中间开始转圈圈
add[i][j] = 1;
while (w != n)
{
if (w % 2 == 1)
{
//右,下,左
add[i][++j] = ++num;
for (int m = 0; m < w; m++)
{
add[++i][j] = ++num;
}
for (int m = 0; m < w; m++)
{
add[i][--j] = ++num;
}
w++;
}
else if (w % 2 == 0)
{
//左,上,右
add[i][--j] = ++num;
for (int m = 0; m < w; m++)
{
add[--i][j] = ++num;
}
for (int m = 0; m < w; m++)
{
add[i][++j] = ++num;
}
w++;
}
}
//3.输出
for (int w = 0; w < n; w++)
{
for (int s = 0; s < n; s++)
{
cout<<add[w][s]<<" ";
}
cout<<endl;
}
system("pause");
return 0;
}
我只是为大家提供一下我的思路(也借鉴了一下网上的代码),如果代码略有不足,还望大家海涵
------一位学习路上的程序员