题目
思路
基本想法就是根据对角线输出数据
由于有正反向的区分,所以每次进行两次循环(一个正向输出,另一个反向输出下一条对角线)
代码(Java与C)
Java代码
import java.util.Scanner;
public class Main {
static final int N = 1010;
static int n;
static int[][] a = new int[N][N];
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
n = in.nextInt();
for(int i = 1 ; i <= n ; i++){
for(int j = 1 ; j <= n ;j++){
a[i][j] = in.nextInt();
}
}
for(int k = 2 ; k <= n*2 ; k++){
for(int i = k ; i > 0 ; i--){
if(a[i][k-i]!=0){
System.out.print(a[i][k-i]+" ");
}
}
k++;
for(int i = 0 ; i < k ; i++){
if(a[i][k-i]!=0){
System.out.print(a[i][k-i]+" ");
}
}
}
}
}
C 代码
#include<stdio.h>
#define N 1010
int a[N][N];
int n;
int main(){
scanf("%d",&n);
for(int i = 1 ; i <= n ; i++){
for(int j = 1 ; j <= n ; j++){
scanf("%d",&a[i][j]);
}
}
for(int k = 2 ; k <= n*2; k++){
for(int i = k ; i >= 0 ; i--){
if(a[i][k-i] != 0){
printf("%d ",a[i][k-i]);
}
}
k++;
for(int i = 0 ; i <= k ; i++){
if(a[i][k-i] != 0){
printf("%d ",a[i][k-i]);
}
}
}
return 0;
}