作业训练二编程题19. 数圈

【问题描述】

以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;
}

我只是为大家提供一下我的思路(也借鉴了一下网上的代码),如果代码略有不足,还望大家海涵

------一位学习路上的程序员

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值