数组矩阵的顺时针输出

其实这个题目,我要讲的并不是这个题目的编码过程,而是对于这个问题解决过程:

我们不能遇到这个问题之后立即编码是错误的,然而立即拿出笔在纸上写写画画时,也是需要进行技巧的,针对这个问题,我们首先看看顺时针时,走一圈作为一个循环,然而该

循环的起点是很有意思的,这个点的所在的点行坐标和列坐标是相同的

也即是双层循环的,一层内部循环是要进行四个方向的的遍历。从左到右       从上到下     从右到左     从下到上

void PrintInnerLoop(int** a,int rows,int colnums,int start)
{
	//内层输出一个小的循环,值得是一圈
	if(NULL==a)
		return;
	//重新定位行和列的结束为止
	int endX=rows-1-start;
	int endY=colnums-1-start;
	//开始进行输出,
	//从左到右,不变的是行值 为start
	for(int i=start;i<=endX;i++)
	{
		cout<<a[start][i]<<"  ";
	}
	//从上到下,不变的是列值,为endY
	if(endY>start)
	{	
		for(int i=start+1;i<=endX;i++)
		{
			cout<<a[i][endX]<<"  ";
		}
	}
	//从右到左,确定的是行值 endX
	if(start<endY)
	{	
		for(int i=endY-1;i>=start;i--)
		{
			cout<<a[endY][i]<<"  ";
		}
	}
	//从下到上  不变的是列值start
	if(start<endX)
	{	
		for(int i=endX-1;i>start;i--)
		{
			cout<<a[i][start]<<"  ";
		}
	}
	cout<<endl;
}
void printOutLop(int** const a,int rows,int colnums)
{
	if(NULL==a)
	{
		return;
	}
	int start=0;
	//首先确定
	while(colnums>start*2&&rows>=start*2)
	{
		PrintInnerLoop(a,rows,colnums,start);
		start++;
	}
}

我的经验是首先在纸上画出在一个循环的时候,标出四个点的坐标所在,在进行内层循环的时候可以方便的进行边界

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

世纪殇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值