面试题20:顺时针打印矩阵
来源:互联网 发布:北京服装定制 知乎 编辑:程序博客网 时间:2024/05/16 15:08
1.输入一个矩阵,按照从外到里以顺时针的顺序打印出每一个数字。
结果:
例如:
分析:
分析循环打印的规律可以发现,每次打印都是往矩阵的内部缩小了一周,这样的话可以可以用两个坐标点来确定这样一个矩形的左上角顶点和右下角顶点,然后依据两个点确定的范围来打印,按照从左到右,从上到下,从右到左,从下到上的顺序打印。
源码:
/**/#include<iostream>using namespace std;//确定打印的矩形框void PrintStart(int**a, int row,int col);//按照四种顺序依次打印void PrintCircle(int** a, int start,int endX,int endY);int main(){int** numbers = new int*[4];cout<<"the original matrix :"<<endl; for(int i = 0; i < 4; ++i) { numbers[i] = new int[4]; for(int j = 0; j < 4; ++j) { numbers[i][j] = i * 4 + j + 1;printf("%3d ",numbers[i][j]); }cout<<endl; }cout<<"the output is : "<<endl;PrintStart(numbers,4,4);system("PAUSE");return 0;}void PrintStart(int** a, int row,int col){int start=0;//左上角位置int endX=row-1;//右上角位置int endY=col-1;while(start<=endX&&start<=endY)//逐步缩小范围{PrintCircle(a, start,endX,endY);start++;endX--;endY--;}cout<<endl;}void PrintCircle(int** a, int start,int endX,int endY){//从左往右打印for(int i=start;i<endY;i++)//行末尾少打印一个,以免重复{cout<<a[start][i]<<" ";}//从上到下打印for(int i=start;i<endX;i++){cout<<a[i][endY]<<" ";}//从右往左打印for(int i=endY;i>start;i--){cout<<a[endX][i]<<" ";}//从下往上打印for(int i=endX;i>start;i--){cout<<a[i][start]<<" ";}}
结果:
0 0
- 面试题20:顺时针打印矩阵 ***
- 面试题20 顺时针打印矩阵
- 面试题20:顺时针打印矩阵
- 面试题20顺时针打印矩阵
- 面试题20顺时针打印矩阵
- 面试题20:顺时针打印矩阵
- 面试题20:顺时针打印矩阵
- 面试题20:顺时针打印矩阵
- 面试题20:顺时针打印矩阵
- 面试题20:顺时针打印矩阵
- 面试题20:顺时针打印矩阵
- 面试题20顺时针打印矩阵
- 【面试题20】顺时针打印矩阵
- 面试题20:顺时针打印矩阵
- 面试题20:顺时针打印矩阵
- 面试题20:顺时针打印矩阵
- 面试题 20: 顺时针打印矩阵
- 剑指offer面试题20顺时针打印矩阵
- JAVA XML解析
- uboot 与系统内核中MTD分区的关系:
- java字节流与字符流之文件复制
- Spring核心技术(十)——JSR-330标准注解
- Linux下tar.xz tar.bz2 tar.gz 等文件的解压
- 面试题20:顺时针打印矩阵
- listview添加headerview需要注意的,listview自定义的item注意的焦点
- MacPorts安装卡住不动,解决方法
- uva 12716 GCD XOR
- 删除字符串中出现次数最少的字符
- C# 禁止windows程序重复运行的两种基本方法
- Eclipse从SVN检出项目Java类图标空心的解决办法
- 编辑器 UEditor 百度富文本web编辑器
- MFC自定义消息没有驱动消息响应函数的问题