专题02 画图题
1.201412-2 Z字形扫描
(1)代码实现
#include<iostream>
using namespace std;
int main(){
//1.同样的我们需要一个东西来接收数据 这里结合题意 就定义一个二维数组吧(和一维数组差不多 多练练就记住了)
int a[501][501]={0},n=0;
cout<<"您要输入矩阵的阶数是多少:";
cin>>n;
cout<<"请输入数据:"<<endl;
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
cin>>a[i][j];
}
}
/*分析:(1)画图题第一步:划分图形(一般是根据 对称性划分的),
这一题是不是根据主对角线划分的呀 ;
(2)然后(0,0)和(n-1,n-1)这两个点是固定的,我们就要按Z形走法从起点到终点;
(3)怎么Z呢?我们来看下图中箭头 有没有啥感角
(分析上三角为例哈:假设一个变量i:表示第几个箭头吧,然后点坐标(x,y))
(0,0) i=0
(0,1) (1,0) i=1
(2,0) (1,1) (0,2) i=2 从这应该能看出点规律了:x--,y++
(0,3) (1,2) (2,1) (3,0) i=3 x++,y--
(4,0) (3,1) (2,2) (1,3) (0,4) i=4(即n-1)
(4)怎么一会x++ 一会y++呢?根据i奇偶性啊。ojbk,我们来编程实现
*/
//2.先输出上三角
int x,y;
for(int i=0;i<=n-1;i++){
if(i%2==0){
x=i;
y=-1;
for(;x>=0;x--){
y++;
cout<<a[x][y]<<" ";
}
}
else{
y=i;
x=-1;
for(;y>=0;y--){
x++;
cout<<a[x][y]<<" ";
}
}
}
/*3.输出下三角 这一步和上一步类似(逆过程) (写的不好 下三角代码还不能重复利用上三角的 还得重新考虑n i x y的关系)
(1,4) (2,3) (3,2) (4,1) i=3
(4,2) (3,3) (2,4) i=2
(3,4) (4,3) i=1
(4,4) i=0
*/
for(int i=n-2;i>=0;i--){
if(i%2==0){
x=n-1; //i为偶 x初始=n-1 y初始=n-i-1
y=(n-i-1)-1;
for(;x>=n-i-1;x--){
y++;
cout<<a[x][y]<<" ";
}
}
else{
y=n-1;
x=(n-i-1)-1;
for(;y>=n-i-1;y--){
x++;
cout<<a[x][y]<<" ";
}
}
}
return 0;
}
(2)运行截图
2.