POJ C程序设计进阶 编程题#2:二维数组从右上左下遍历
编程题#2: 二维数组右上左下遍历
来源: POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩。)
注意: 总时间限制: 1000ms 内存限制: 65536kB
描述
给定一个row行col列的整数数组array,要求从array[0][0]元素开始,按从左上到右下的对角线顺序遍历整个数组。
输入
输入的第一行上有两个整数,依次为row和col。
余下有row行,每行包含col个整数,构成一个二维整数数组。
(注:输入的row和col保证0 < row < 100, 0 < col < 100)
输出
按遍历顺序输出每个整数。每个整数占一行。
样例输入
3 4 1 2 4 7 3 5 8 10 6 9 11 12
样例输出
1 2 3 4 5 6 7 8 9 10 11 12
这题情况复杂,完全参考了网上大神的结果
#include<stdio.h> int main() { int row,col,a[100][100],i,j,x,y,t; scanf("%d%d",&row,&col); for(i=0;i<row;i++) { for(j=0;j<col;j++) { scanf("%d",&a[i][j]); } } if(row>col) { t=col; for(j=0;j<t;j++) { y=j; x=0; for(i=0;i<=j;i++,x++,y--) { printf("%d\n",a[x][y]); } } t=row-col; for(j=1;j<=t;j++) { y=col-1; x=j; for(i=1;i<=col;i++,x++,y--) { printf("%d\n",a[x][y]); } } t=col-1; for(j=t;j>0;j--) { y=col-1; x=row-j; for(i=0;i<j;i++,x++,y--) { printf("%d\n",a[x][y]); } } } else if(row<col) { t=row; for(i=1;i<=t;i++) { x=0; y=i-1; for(j=1;j<=i;j++,x++,y--) { printf("%d\n",a[x][y]); } } t=col-row; for(i=1;i<=t;i++) { x=0; y=row+i-1; for(j=1;j<=row;j++,x++,y--) { printf("%d\n",a[x][y]); } } t=row-1; for(i=t;i>0;i--) { x=row-i; y=col-1; for(j=1;j<=i;j++,x++,y--) { printf("%d\n",a[x][y]); } } } else { t=row; for(i=1;i<=t;i++) { x=0; y=i-1; for(j=1;j<=i;j++,x++,y--) { printf("%d\n",a[x][y]); } } t=row-1; for(i=t;i>0;i--) { x=row-i; y=col-1; for(j=1;j<=i;j++,x++,y--) { printf("%d\n",a[x][y]); } } } return 0; }

浙公网安备 33010602011771号