思路:暴力模拟,复杂度O(n^3)。Z字形扫描时,i + j == t,循环遍历所有的t的可能值即可t在[0…2*(n-1)]范围内,i,j在0…n。t是偶数时,先打印行;t是奇数时,先打印列。
#include <iostream>
using namespace std;
const int N = 500;
int data[N][N];
int main(){
int n;
cin>>n;
for(int i = 0; i < n; i++){
for(int j = 0; j < n; j++){
cin>>data[i][j];
}
}
for(int t = 0; t <= 2*(n-1); t++){
for(int i = 0; i < n; i++){
for(int j = 0; j < n; j++){
if(t % 2 == 0 && i + j == t){
cout<<data[j][i]<<' ';
}
else if(t % 2 == 1 && i + j == t){
cout<<data[i][j]<<' ';
}
}
}
}
return 0;
}