【编程题】蛇形环

这篇博客介绍了一种用C++编程解决蛇形环填充矩阵问题的方法。通过设置循环条件和方向判断,实现了从左到右、从上到下、从右到左、从下到上的填充顺序,从而生成指定大小的矩阵并填充字母。代码中使用二维数组存储矩阵,并通过四个while循环来控制填充方向,确保不会越界或覆盖已填充的元素。最后,将数组转换为字母输出展示结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目:
输入非负整数M,N;输出一个M行N列的矩阵;蛇形环,内容为A-Z;

示例:

1:
输入:
3 2
输出:
A B
F C
E D

例2:
输入:
5 6
输出:
A B C D E F
R S T U V G
Q B C D W H
P A Z Y X I
O N M L K J

解析:
这题就不要尝试找坐标与元素的关系了,直接顺序填入即可。
这道题是蛇形环,元素的填入顺序的循环为:
自左向右-》自上向下-》自右向左-》自下向上

那如何实现这个填入顺序呢?我们需要“墙壁”的存在。
根据题意,我们可以得知:
1、当数组填入碰到数组长度界限时(即x>m或>n等)需要换向;
2、当数组下一个准备填入的元素已经存取了元素时,需要换向。

代码:

#include <iostream>

using namespace std;

//存取用数组
const int maxn = 2000;
int arr[maxn][maxn];

int main()
{
	int n, m;
	cin >> n >> m;

	memset(arr, 0, sizeof(arr));

	//作为循环跳出条件
	int amount = n * m;

	int i=0, j=0;
	int count = arr[i][j]=1;

	while(count<amount)
	{
		//填入顺序为:自左向右 - 》自上向下 - 》自右向左 - 》自下向上
		//自左向右
		while (j+1<m&&!arr[i][j+1])
		{
			arr[i][++j] = ++count;
		}
		//自上向下
		while (i + 1 < n && !arr[i+1][j] )
		{
			arr[++i][j] = ++count;
		}
		//自右向左
		while (j - 1 >=0 && !arr[i][j-1] )
		{
			arr[i][--j] = ++count;
		}
		//自下向上
		while (i - 1 >=0 && !arr[i - 1][j] )
		{
			arr[--i][j] = ++count;
		}
	}

	//输出
	for(int a=0;a<n;a++)
	{
		for(int b=0;b<m;b++)
		{
			char ch = 'A' + (arr[a][b] - 1) % 26;
			cout << ch << " ";
		}
		cout << endl;
	}
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值