文档章节

顺时针打印数组

htq
 htq
发布于 2016/07/26 09:40
字数 472
阅读 6
收藏 0

要求:输入一个矩阵,按照从外向里以顺时针的顺序打印出每一个数字。如:如果输入的矩阵为:
1   2   3    4
5   6   7    8
9  10  11 12
13 14 15 16   则输出结果为:
1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.

思路:根据题目描述,我们可以得到一些提示信息,即我们可以把该矩阵看作是一个一个圈组成,我们可以定义一个打印数组最外层一圈数字的函数priintMatrixInCircle(),在该函数中我们先从起始位置(记为start)从左到右,然后从上到下,然后从右到左,然后从下到上打印数字,即为一圈,打印完一圈之后很容易知道,start的值将会加1,然后重复上述过程直至col>start*2&&row>start*2,即当起始位置到达矩阵中心时结束循环
当然此题也可用递归来解决,关于递归的思路请参看我的博客: 螺旋数组

基于上述思路,代码如下:
#include<iostream>
using namespace std;
void printMatrixInCircle(int array[][4],int row,int col,int start)//前面三个参数用于数组操作,具体含义见名知义,start用来表示
	//打印该圈数组的起始位置
{
	int endX=row-1-start;
	int endY=col-1-start;
	int index;
	for(index=start;index<endX;index++)
	{
		cout<<array[start][index]<<' ';
	}
	for(index=start;index<endY;index++)
	{
		cout<<array[index][endX]<<' ';
	}
	for(index=endX;index>start;index--)
	{
		cout<<array[endY][index]<<' ';
	}
	for(index=endY;index>start;index--)
	{
		cout<<array[index][start]<<' ';
	}

}
void printMatrix(int array[][4],int row,int col)
{
	if(array==NULL||col<=0||row<=0)
		return;
	int start=0;
	while(col>start*2&&row>start*2)//注意循环终止条件
	{
		printMatrixInCircle(array,row,col,start);
		start++;
	}

}
int main()
{
	int array[][4]={
		1,  2,  3,  4,
  	   <span style="white-space:pre">	</span>5,  6,  7,  8,
 	   <span style="white-space:pre">	</span>9,  10, 11, 12,
 	        13, 14, 15, 16
	};
	printMatrix(array,4,4);
	return 1;
}
程序运行结果如下:


本文转载自:http://blog.csdn.net/htq__/article/details/50907359

共有 人打赏支持
htq

htq

粉丝 19
博文 67
码字总数 1007
作品 3
武汉
私信 提问
java顺时针、逆时针打印矩阵

题目要求: 顺时针打印一个数组,比如输入3,打印出: 首先我们来分析一下这个数组,如下图所示,数组的是沿着顺时针的方向按照数字递增的方式增加的,我们一般是使用for嵌套来构造这个数组。...

Anumbrella
2017/02/13
0
0
编程题——11~20

十一、数值的整数次方 实现函数double Power( double base, int exponent ),求base的exponent。不使用哭函数,同时 不需要考虑大数问题。 十二、打印1到最大的n位数 输入数字n,按顺序打印出...

thanatos_y
2016/07/21
0
0
C算法编程题(五)“E”的变换

程序描述   给定7×7二维数组矩阵,元素由“0”或“1”组成,并且根据元素值屏幕显示“E”字形图案,其中“0”显示空格,“1”显示“@”。 如矩阵 0 1 1 1 1 1 0 0 1 0 0 0 0 0 0 1 0 0 0 ...

范大脚脚
2017/11/07
0
0
python剑指offer66题

二维数组的查找 替换空格 从头到尾打印链表 重建二叉树 用两个栈实现队列 选择数组中的最小数字 斐波那契数列 跳台阶 变态跳台阶 矩形覆盖 二进制中1的个数 数值的整数次方 调整数组顺序使奇...

lyy0905
2018/06/03
0
0
20.顺时针打印矩阵(代码测试未完成)

题目:输入一个矩阵。按照从外向里以顺时针的顺序依次打印出每一个数字。例如输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 打印出的数字为:1、2、3、4、8、12、16、15、14、13、...

无精疯
2018/04/20
0
0

没有更多内容

加载失败,请刷新页面

加载更多

多命令链命令参数

Commands: --install <link> <name> <path> <priority> [--slave <link> <name> <path>] ... 在系统中加入一组替换项. --remove <name> <path> 从 <名......

Pulsar-V
23分钟前
0
0
【转】go get命令使用socket代理

由于某些不可描述的原因,国内使用go get命令安装某些包的时候会超时导致失败,比如net包、sys包、tools包等。第一种解决办法就是自己从git上下载后添加链接到GOPATH中,比如: 1234...

yiduwangkai
25分钟前
0
0
Windows同步对象Event和Linux的条件变量

最近在看一些同步对象模拟的东东,特别对在Windows下如何模拟条件变量折腾了很久。 1 Windows同步对象Event 微软有一个很有意思的同步对象,某种程度上和Linux的条件变量很相似。但秉承微软一...

shzwork
33分钟前
1
0
从上往下打印出二叉树的每个节点,同层节点从左至右打印。

//第一种做法 public class Solution { public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) { ArrayList <Integer> li=new ArrayList<Integer>(); ArrayList <TreeN......

南桥北木
42分钟前
1
0
linux 服务管理 Crontba、Ntpdate、Logrotate、Supervisor

crond linux 系统则是由 cron (crond) 这个系统服务来控制的。Linux 系统上面原本就有非常多的计划性工作,因此这个系统服务是默认启动的。 另外, 由于使用者自己也可以设置计划任务,所以,...

狼王黄师傅
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部