zoukankan      html  css  js  c++  java
  • OpenJudge计算概论-二维数组右上左下遍历

    /*======================================================================
    二维数组右上左下遍历
    总时间限制: 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


    解析:这个题目需要分情况讨论行数和列数的大小关系,不同情况不同的处理方式。



    上图当中,以土黄色斜排为分隔界限把矩阵分成了两个或三个部分,每一部分都需要用两重循环来完成。其中:外层循环控制斜排的层数,内层循环控制一个斜排内部的单元个数。
    上三角部分斜排个数等于列数(row>col)或行数(row<col),下三角部分斜排的个数等于列数
    (row>col)或行数(row<col)(当然,其中有些部分需要注意多1或少1的问题,
    毕竟分界线所在的斜排可以属于相邻的两个部分当中的任意一个。具体的请看代码和注释。)
    ========================================================================*/
      1 #include<stdio.h>
      2 int main()
      3 {
      4     int row,col,a[100][100],i,j,x,y,t;
      5     freopen("55555.in","r",stdin);
      6     freopen("result.out","w",stdout);
      7     scanf("%d%d",&row,&col);
      8     for(i=0;i<row;i++)
      9     {
     10         for(j=0;j<col;j++)
     11         {
     12             scanf("%d",&a[i][j]);
     13         }
     14     }
     15     /*for(i=0;i<row;i++)
     16     {
     17         for(j=0;j<col;j++)
     18         {
     19             printf("%d ",a[i][j]);
     20         }
     21         printf("
    ");
     22     }*/
     23     /**/
     24     if(row>col)
     25     {
     26         t=col;//斜排数量 
     27         for(j=0;j<t;j++)//循环处理每一个斜排 
     28         {
     29             y=j;//每个斜排第一个单元的纵坐标 
     30             x=0;//每个斜排第一个单元的横坐标 
     31             for(i=0;i<=j;i++,x++,y--)//i控制每个斜排内部单元的个数 
     32             {
     33                 printf("%d
    ",a[x][y]);
     34             }
     35         }
     36         
     37         t=row-col;
     38         for(j=1;j<=t;j++)
     39         {
     40             y=col-1;
     41             x=j;
     42             for(i=1;i<=col;i++,x++,y--)
     43             {
     44                 printf("%d
    ",a[x][y]);
     45             }
     46         }
     47         
     48         t=col-1;
     49         for(j=t;j>0;j--)
     50         {
     51             y=col-1;
     52             x=row-j;
     53             for(i=0;i<j;i++,x++,y--)
     54             {
     55                 printf("%d
    ",a[x][y]);
     56             }
     57         }
     58     }
     59     else if(row<col)
     60     {
     61         t=row;
     62         for(i=1;i<=t;i++)
     63         {
     64             x=0;
     65             y=i-1;
     66             for(j=1;j<=i;j++,x++,y--)
     67             {
     68                 printf("%d
    ",a[x][y]);
     69             }
     70         }
     71         
     72         t=col-row;
     73         for(i=1;i<=t;i++)
     74         {
     75             x=0;
     76             y=row+i-1;
     77             for(j=1;j<=row;j++,x++,y--)
     78             {
     79                 printf("%d
    ",a[x][y]);
     80             }
     81         }
     82         
     83         t=row-1;
     84         for(i=t;i>0;i--)
     85         {
     86             x=row-i;
     87             y=col-1;
     88             for(j=1;j<=i;j++,x++,y--)
     89             {
     90                 printf("%d
    ",a[x][y]);
     91             }
     92         }
     93     }
     94     else
     95     {
     96         t=row;
     97         for(i=1;i<=t;i++)
     98         {
     99             x=0;
    100             y=i-1;
    101             for(j=1;j<=i;j++,x++,y--)
    102             {
    103                 printf("%d
    ",a[x][y]);
    104             }
    105         }
    106         
    107         t=row-1;
    108         for(i=t;i>0;i--)
    109         {
    110             x=row-i;
    111             y=col-1;
    112             for(j=1;j<=i;j++,x++,y--)
    113             {
    114                 printf("%d
    ",a[x][y]);
    115             }
    116         }
    117     }
    118     
    119     
    120     return 0;
    121 }

    下面是一些测试案例:

    1 2 4 7 11 16 22
    3 5 8 12 17 23 29
    6 9 13 18 24 30 36
    10 14 19 25 31 37 43
    15 20 26 32 38 44 50
    21 27 33 39 45 51 57
    28 34 40 46 52 58 64
    35 41 47 53 59 65 71
    42 48 54 60 66 72 78
    49 55 61 67 73 79 85
    56 62 68 74 80 86 92
    63 69 75 81 87 93 99
    70 76 82 88 94 100 105
    77 83 89 95 101 106 110
    84 90 96 102 107 111 114
    91 97 103 108 112 115 117
    98 104 109 113 116 118 119
    1 2 4 7 11 16 22 28 34 40 46 52 58 64 70
    3 5 8 12 17 23 29 35 41 47 53 59 65 71 76
    6 9 13 18 24 30 36 42 48 54 60 66 72 77 81
    10 14 19 25 31 37 43 49 55 61 67 73 78 82 85
    15 20 26 32 38 44 50 56 62 68 74 79 83 86 88
    21 27 33 39 45 51 57 63 69 75 80 84 87 89 90
    1 2 4
    3 5 7
    6 8 10
    9 11 12
    1 2 4 7
    3 5 8 11
    6 9 12 14
    10 13 15 16

     这个其实可以考虑把上面的这么多次相类似的代码写成子函数。

    (row<col)
  • 相关阅读:
    进程 线程 协程
    TCP的滑动窗口和网络拥塞控制
    Golang中函数结构体,将函数转换为接口
    go的调度 与 go 的GC
    未来程序员这个工种会如何进化与“35岁之殇”的思考
    golang 实现 LRU
    golang 单例模式实现
    内存泄露及内存溢出,解决方案
    Jvm调优参数
    HttpUtil
  • 原文地址:https://www.cnblogs.com/huashanqingzhu/p/3477717.html
Copyright © 2011-2022 走看看