Z形打印(模拟)

 分析:将模型简单化,分为向斜上方走和向斜下方走,当遇到边界时就

  1. 处理当步该走方向
  2. 变化整体方向 flag = !flag
public class Main {
	public static  int a[][] = {
			{1,2,3,4},
			{5,6,7,8},
			{9,10,11,12}
};

	public static void main(String[] args) {
		
		/* for(int i = 0 ; i < 3; i ++) {
			 for(int j = 0; j < 4; j ++) {
				 System.out.print(a[i][j] + " ");
			 }
			 System.out.println();
		 }*/
		PrintZ();

	}

	private static void PrintZ() {
	
    boolean flag = true;
    int nr = 3;
    int nc = 4;
    
    
    int i = 0, j = 0;
    while(i < nr && j < nc) {
    	System.out.print(a[i][j] + " ");
    	//System.out.println(a[0][0]);
    	if(flag) {
    		
    		if(i == 0 && j < nc) {  //向斜上走到第一行则向右走一步,变向  			
    			j ++ ;
    			//System.out.print(a[i][j] + " ");
    			flag = !flag;
    			continue;
    		}
    		else if(j == nc - 1 && i > 0) {//向斜上走到最后一列则向下走一步,变向
    			i ++;
    			flag = !flag;
    			//System.out.print(a[i][j] + " ");
    		}
    		else {
    			i --;
    			j ++;
    			//System.out.print(a[i][j] + "");
    		}
    	}
    	else {
    		if(j == 0 && i < nr) {  //向斜下走到第一列则向下走一步,变向  			
    			i ++ ;
    			flag = !flag;
    			//System.out.print(a[i][j] + "");
    		}
    		else if(i == nr - 1 && j > 0) {//向斜下走到最后一行则向右走一步,变向
    			j ++;
    			flag = !flag;
    			//System.out.print(a[i][j] + "");
    		}
    		else {
    			i ++;
    			j --;
    			//System.out.print(a[i][j] + "");
    		}
    	}
    }
	}

}

总结:此类题目就是模拟的解题方法,注意每一步该走方向,注意细节 

猜你喜欢

转载自blog.csdn.net/qq_42794545/article/details/89384309