【蛇形方阵】洛谷P5731蛇形方阵含代码详解

蛇形方阵

【深基5.习6】蛇形方阵

题目描述

给出一个不大于 9 9 9 的正整数 n n n,输出 n × n n\times n n×n
的蛇形方阵。

从左上角填上 1 1 1 开始,顺时针方向依次填入数字,如同样例所示。注意每个数字有都会占用 3 3 3 个字符,前面使用空格补齐。

输入格式

输入一个正整数 n n n,含义如题所述。

输出格式

输出符合题目要求的蛇形矩阵。

样例 #1

样例输入 #1

4

样例输出 #1

1  2  3  4
 12 13 14  5
 11 16 15  6
 10  9  8  7

提示

数据保证, 1 ≤ n ≤ 9 1 \leq n \leq 9 1n9

  • 这是一道入门里面相对有些难的题,现在讲解一下。
  • 如果直接按从左到右从上到下的顺序输出难以实现的话,不妨试一试一开始先把地图全部设为0,在按照一定顺序进行填充,最后输出。
#include<bits/stdc++.h>
using namespace std;
const int N = 101;
int arr[N][N];

int main()
{
	int x = 1,y = 1,sum = 1,n;
	arr[x][y] = 1;//第一个元素始终是1
	cin>>n;//读入边长
	while(1)//先写一个死循环,地图被填满跳出循环体
	{
		if(sum == n*n)	break;//判断地图填满,终止循环
		while(y+1 <= n && arr[x][y+1] == 0)//向右更新,判断没有出地图并且要更新的元素是0
		{
			y++;//右移
			sum++;//总更新个数
			arr[x][y] = sum;//定义第sum个数字
		}
		while(x+1 <= n && arr[x+1][y] == 0)//向下更新,判断没有出地图并且要更新的元素是0
		{
			x++;//下移
			sum++;//总更新个数
			arr[x][y] = sum;//定义第sum个数字
		}
		while(y-1 >= 1 && arr[x][y-1] == 0)//向左更新,判断没有出地图并且要更新的元素是0
		{
			y--;//左移
			sum++;//总更新个数
			arr[x][y] = sum;//定义第sum个数字
		}
		while(x-1 >= 1 && arr[x-1][y] == 0)//向上更新,判断没有出地图并且要更新的元素是0
		{
			x--;//上移
			sum++;//总更新个数
			arr[x][y] = sum;//定义第sum个数字
		}
	}
	for(int i = 1;i<=n;i++)
	{
		for(int j = 1;j<=n;j++)
		{
			printf("%3d",arr[i][j]);//输出地图,对齐3格
		}
		printf("\n");
	}
}

代码中,定义了四种填充方式,四步while循环自动判断,相对于for循环和定义步长变量要简单很多。
有时一时想不起来的问题,可以跳出以往的习惯代码模板,换一种思维方式,去迎合问题来处理,往往会更加简单。😎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值