CCF201412-2 Z字形扫描
题目:
题目分析:
根据题目输入n,矩阵a[ ]。
Z字形扫描矩阵,由于单次扫描的下标之和依次是0,1,2,…,2n。所以循环k=0—2n次遍历,由于2*n下标会越界,故数组a需要开大一些。
对于k为偶数,当前需要输出的a[i][j]的下标变化为:
i:k->0; j:0->k.
对于k为偶数,当前需要输出的a[i][j]的下标变化为:
i:0->k; j:k->0;.
判断a[i][j]不为0即可输出。
代码如下,有详细注解:
#include<iostream>
using namespace std;
int a[1005][1005],n;//由于2*n下标会越界,故数组a需要开大一些
int main(){
cin>>n; //输入
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
cin>>a[i][j];
for(int k=0;k<=2*n;k++){ //循环0--2*n
if(k%2==0){ //k为偶数
for(int i=0;i<=k;i++)//i:0->k
if(a[k-i][i]!=0) //前一个下标k->0,后一个下标0->k
cout<<a[k-i][i]<<" ";//不为0输出
}
else{ //k为奇数
for(int i=0;i<=k;i++)//i:0->k
if(a[i][k-i]!=0) //前一个下标0->k,后一个下标k->0
cout<<a[i][k-i]<<" ";//不为0输出
}
}
return 0;
}