?可输入一个数组,按“之”字形打印出来
如:1 2 3 4
? ? ? ? 5 6 7 8
? ? ? ? 9 10 11 12
打印后结果为:1 2 5 9 6 3 4 7 10 11 8 12
下面是C语言代码
#include<stdio.h>
/*
坐标法,图示如下
(0,0)----(hx,hy)------- endy
|
|
|
(lx,ly)
|
|
|
endx
hy==endy之前,hx一直自增,之后hx不变,hy自增
ly==endx之前,lx一直自增,之后lx不变,ly自增
*/
int main(){
int hang;
int lie;
printf("输入行列数:\n");
scanf("%d%d",&hang,&lie);
int a[hang][lie];
int i,j;
printf("输入值:\n");
for(i=0;i<hang;i++){
for(j=0;j<lie;j++){
scanf("%d",&a[i][j]);
}
}
printf("输出为:\n");
int hx=0,hy=0,lx=0,ly=0;
int flag=0;
int endx=hang-1,endy=lie-1;
int hhx,hhy,llx,lly;
//当 ly==endy 时,该位置的值还得输出,所以end+1时终止循环
while(ly != endy+1)
{
//因为输出矩阵的值时,会改变坐标值,
//所以用其他标量暂存待输出坐标的初始值
hhx=hx;
hhy=hy;
llx=lx;
lly=ly;
if(flag==1){
//从 右上 往 左下 输出
while(hhx != llx+1){
printf("%d ",a[hhx++][hhy--]);
}
flag=0;
}else{
while(llx != hhx-1){
printf("%d ",a[llx--][lly++]);
}
flag=1;
}
//hy 和 lx 必须后改变
hx = hy==endy ? hx+1:hx;
hy = hy==endy ? hy:hy+1;
ly = lx==endx ? ly+1:ly;
lx = lx==endx ? lx:lx+1;
}
return 0;
}
|