面试题20:顺时针打印矩阵
2016-07-11 12:35
489 查看
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]<<" "; } }
结果:
相关文章推荐
- Java面试宝典基础篇(绝对值得收藏超长版)
- Java程序员面试失败的5大原因
- 面试总结
- 65种应聘面试回答
- 杂
- 程序员永远不要再犯的5个编程bug
- Android面试题(二)——IPC机制
- 10009---59条令人捧腹但真实的程序员编程语录
- php面试题及答案
- 经典的Java基础面试题集锦
- 剑指offer 面试题50 树中两个节点的最低公共祖先
- 剑指offer 面试题49 把字符串转换成整数
- 程序员作为面试官的一点心得
- 一位程序员偷偷爬取了近100w个招聘职位数据,然后得出了这些结论
- 程序员必读经典书籍
- 作为程序员一定要会这些软件
- 分享几个前端干货,面试经常提
- 面试题29:数组中出现次数超过一半的数字
- java面试宝典学习笔记(三)
- 程序员的升级之路