【算法】——Z形打印二维数组

将二维数组按Z形打印出来

其中有一点在代码的思考中使的非常清晰,将情况分为两大种,一种是走上坡路一种是走下坡路的,在这两个大情况中再分别考虑

#include<stdio.h>
void printZ(int A[][200],int m,int n);
int main()
{
    int m,n,i,j;
    int A[200][200];
    scanf("%d %d",&m,&n);
    for(i=0; i<m; i++)
    {
        for(j=0; j<n; j++)
        {
            scanf("%d",&A[i][j]);
        }
     } 
     printZ(A,m,n);
    return 0;
 } 

void printZ(int A[][200],int m,int n)
{
    int h,l;
    h=l=0;
    //先定一个布尔类型的记录当前是从左下往右上走上坡路还是从右上往左下走下坡路
    //记录真为走上坡路
    int up=1;
    while(h<m&&l<n)//当都没有越界的时候进行循环 
    {
        //当时从左下往右上上坡路的时候 
        if(up)
        {
            //当时走上坡路的时候先打印出来当前元素
            printf("%d ",A[h][l]);
            //当是第一排但是列没有越界的时候
            if(h==0&&l<n-1)
            {
                //向右移动
                l++;
                //并且把当前情况转为下坡路,因为移动到下一个斜线的话那就会变情况
                up=0; 
                //已经变成下坡路了所以下面关于是上坡路的循环就可以跳过了
                continue; 
             } 
             //当时最后一列但是行没有越界的时候就往下(这种情况是在上坡路的情况中的一个) 
             else if(l==n-1&&h>0)//注意这个是在不是第一行的情况下向下否则就是向右 
             {
                 //向下移动 
                h++; 
                //这样之后情况又变成了下坡路
                up=0; 
                //已经变成下坡路了所以下面关于是上坡路的循环就可以跳过了
                continue; 
              }
              //当处于一条上坡路斜线的中间部分的时候或者是最后一排的时候就继续向上走 ,不需要改变情况 
              else{
                  h--;
                  l++;
              }
        }
        //接下来的下坡路的时候
        else {
            //先打印
            printf("%d ",A[h][l]); 
            //当时第一列的时候
            if(l==0&&h<m-1)
            {
                //向下移动
                h++;
                //变换情况
                up=1;
                continue; 
             }
             //当时最后一排的时候
             else if(h==m-1)
             {
                 //向右移动
                 l++;
                //变换情况 
                up=1;
                continue;
              } 
              //否则就直接向下走
              else {
                  h++;
                  l--;
              } 
         } 
     } 
 } 

猜你喜欢

转载自www.cnblogs.com/jessie99/p/12409149.html