剑指Offer系列---(22)顺时针打印矩阵
来源:互联网 发布:数控车床编程培训教程 编辑:程序博客网 时间:2024/05/29 13:59
1.题目描述:
输入一个矩阵,按照从外到里以顺时针的顺序依次打印出每一个数字。
2.分析:
1)循环继续的条件是:columns>startX*2并且rows>startY*2。
2)把打印一圈分为四步:第一步从左到右打印一行,第二步从上到下打印一列,第三步从右到左打印一行,第四步从下到上打印一列。
3)最后一圈有可能退化成只有一行、只有一列,甚至只有一个数字。第二步的前提条件是终止行号大于起始行号。第三步打印的前提条件为至少有两行两列。第四步的前提条件是至少有三行两列。
3.源代码:
#include <iostream>using namespace std;void printNumber(int a){ cout<<a<<" ";}void PrintMatrixInCircle(int** numbers,int rows,int columns,int start){ int endX = columns - 1 - start; int endY = rows - 1 - start; //从左到右打印一行 for(int i=start;i<=endX;i++) { int number = numbers[start][i]; printNumber(number); } //从上到下打印一列 if(start<endY) { for(int i=start+1;i<=endY;i++) { int number = numbers[i][endX]; printNumber(number); } } //从右到左打印一行 if(start<endX && start<endY) { for(int i = endX-1;i>=start;i--) { int number = numbers[endY][i]; printNumber(number); } } //从下到上打印一列 if(start<endX && start<endY-1) { for(int i=endY-1;i>=start+1;i--) { int number = numbers[i][start]; printNumber(number); } }}////顺时针打印矩阵,行数为rows,列数为columnsvoid PrintMatrixClockwisely(int** numbers,int rows,int columns){ if(numbers == NULL || columns <= 0 || rows <= 0) return; int start = 0; while(columns > (start * 2) && rows > (start * 2)) { PrintMatrixInCircle(numbers,rows,columns,start); ++start; }}int main(int argc,char *argv[]){ int numbers1[4][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}}; int **p1 = new int*[4]; for(int i=0;i<4;i++) { p1[i] = numbers1[i]; } PrintMatrixClockwisely(p1,4,4); cout<<endl; int numbers2[1][4]={{1,2,3,4}}; int **p2 = new int*[1]; for(int i=0;i<1;i++) { p2[i] = numbers2[i]; } PrintMatrixClockwisely(p2,1,4); cout<<endl; int numbers3[4][1]={{1},{2},{3},{4}}; int **p3 = new int*[4]; for(int i=0;i<4;i++) { p3[i] = numbers3[i]; } PrintMatrixClockwisely(p3,4,1); cout<<endl; int numbers4[2][5]={1,2,3,4,5,6,7,8,9,10}; int **p4 = new int*[2]; for(int i=0;i<2;i++) { p4[i] = numbers4[i]; } PrintMatrixClockwisely(p4,2,5); cout<<endl;}
4.运行效果:
1 2 3 4 8 12 16 15 14 13 9 5 6 7 11 10 1 2 3 4 1 2 3 4 1 2 3 4 5 10 9 8 7 6 Program ended with exit code: 0
0 0
- 剑指Offer系列---(22)顺时针打印矩阵
- 【剑指offer系列】 顺时针打印矩阵___20
- 剑指offer系列-T20顺时针打印矩阵
- 剑指offer系列----顺时针打印矩阵
- 【剑指offer】顺时针打印矩阵
- 剑指offer--顺时针打印矩阵
- 剑指offer--顺时针打印矩阵
- 剑指offer 顺时针打印矩阵
- 剑指offer:顺时针打印矩阵
- 《剑指offer》顺时针打印矩阵
- 剑指offer-顺时针打印矩阵
- 剑指offer 顺时针打印矩阵
- 剑指offer:顺时针打印矩阵
- 剑指offer-顺时针打印矩阵
- 剑指offer 顺时针打印矩阵
- 剑指offer:顺时针打印矩阵
- [剑指offer]顺时针打印矩阵
- 《剑指offer》-顺时针打印矩阵
- Redis --- Redission客户端
- 如何选择响应式与自适应设计?
- Android开发学习笔记:Intent的简介以及属性的详解
- 如何做好一个网站
- 谁动了我的流量
- 剑指Offer系列---(22)顺时针打印矩阵
- Java程序调用CMD批处理
- hdu-travel
- 逆波兰计算机的实现
- cmd命令的学习总结(2)
- C# 反射机制详解
- iOS多线程
- OpenLayers 3 之 绘制图形(ol.interaction.Draw)原理解析
- 求字符串中字符最多的字符