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;
}

 

posted @ 2015-08-10 20:24  dagon  阅读(1272)  评论(1)    收藏  举报