【思路】
模拟
z形矩阵分两部分:前半部分和后半部分
先确定每个部分的起始位置 然后根据每条对角线x、y之和是定值。x走动带动y
import java.util.Scanner;
public class Main{
static int N = 510;
static int a[][] = new int[N][N];
public static void main(String args[]){
Scanner reader = new Scanner(System.in);
int n = reader.nextInt();
for(int i = 0; i < n; i ++)
for(int j = 0; j < n; j ++)
a[i][j] = reader.nextInt();
int step = 0;
int x = 0, y = step -x;
while( step <= n - 1){//前半部分
if(step % 2 == 1) //从右上到左下
for(x = 0, y = step -x; x <= step; x++, y = step -x)
System.out.print(a[x][y]+" ");
else //从左下到右上
for(x = step, y = step -x; x >=0 ; x --, y = step -x)
System.out.print(a[x][y]+" ");
step ++;
}
int k = 1;
while( step < 2 * n - 1){//后半部分
if(step % 2 == 0 ){//从左下到右上
for(x = n - 1, y = step - x; x >= k; x --, y = step - x)
System.out.print(a[x][y]+" ");
}
else //从右上到左下
for(y = n - 1, x = step - y; x < n; x ++ , y = step - x)
System.out.print(a[x][y]+" ");
k ++;
step ++;
}
}
}