二维数组的转圈打印和“之”字打印

来源:互联网 发布:qb充值软件 编辑:程序博客网 时间:2024/05/21 11:11


       本次的代码是转圈打印和“之”字打印,两道题的基本思路是一致的,主要锻炼的是代码实现技巧。在转圈打印中,通过左上点和右下点就能标记出一个矩阵;“之”字打印中,对于左边变化的判断是需要熟练的。


1.转圈打印矩阵

#include "Array_matrix8_1.h"#include "iostream"using namespace std;#define N 4#define M 4Array_matrix8_1::Array_matrix8_1(){    //ctor}Array_matrix8_1::~Array_matrix8_1(){    //dtor}/*    不要纠结于坐标怎么上下左右动    4个变量标记一个矩阵,4个while循环*/void printEdge(int mat1[N][M],int ro1,int ro2,int co1,int co2){    int cur1=co1;    int cur2=ro1;    while(cur1!=co2){   //***可直接用“!=”减少多余的考虑        cout<<mat1[ro1][cur1]<<" ";        cur1++;    }    while(cur2!=ro2){        cout<<mat1[cur2][co2]<<" ";        cur2++;    }    while(cur1!=co1){        cout<<mat1[ro2][cur1]<<" ";        cur1--;    }    while(cur2!=ro1){        cout<<mat1[cur2][co1]<<" ";        cur2--;    }}void spiralOrderPrint(int mat[N][M]){    int row1=0;         //左上点的横坐标    int row2=N-1;       //右下点的横坐标    int col1=0;    int col2=M-1;    while(row1<=row2&&col1<=col2)    {       // printEdge(mat,row1++,row2--,col1++,col2--);        printEdge(mat,row1,row2,col1,col2);        row1++;        row2--;        col1++;        col2--;    }}int main(){    int matrix[N][M]={1,2,3,4,5,6,7,8,4,3,2,1,8,7,6,5};    spiralOrderPrint(matrix);    return 0;}






2.“之”字打印

#include "Array_matrix8_3.h"#include "iostream"using namespace std;#define N 4#define M 4Array_matrix8_3::Array_matrix8_3(){    //ctor}Array_matrix8_3::~Array_matrix8_3(){    //dtor}void print_level(int ma[N][M],int ro1,int ro2,int co1,int co2,bool fl){    if(fl){        while(ro1!=ro2+1){            cout<<ma[ro1++][co1--]<<" ";        }    }else{        while(ro2!=ro1-1){            cout<<ma[ro2--][co2++]<<" ";        }    }}void Zhizi_Print(int mat[N][M]){  int row1=0;  //(row1,col1)横向走的坐标   (row2,col2)纵向走的坐标  int row2=0;  int col1=0;  int col2=0;  int endrow=N-1;  int endcol=M-1;  bool flag=false;  while(row1!=endrow+1){    print_level(mat,row1,row2,col1,col2,flag);    row1= col1==endcol ? row1+1:row1;       //如果走到的最后一列横坐标加1    col1= col1==endcol ? col1  :col1+1;     //如果没有走到最后一列纵坐标加1    col2= row2==endrow ? col2+1:col2;    row2= row2==endrow ? row2  :row2+1;    flag= !flag;                            //flag==true :右上 ->左下,flag==false :左下 ->右上  }}int main(){    int matrix[N][M]={ {1,2,3,4},{1,2,3,4},{1,2,3,4},{1,2,3,4}};    Zhizi_Print(matrix);    return 0;


0 0