zoukankan      html  css  js  c++  java
  • 二维数组斜线扫描心得与分析

     1 #include <stdio.h>
     2 /*
     3 打印以对角线为界的半面的数据
     4 
     5     int arr[5][5] = { 1, 2, 3, 4, 5,
     6                       6, 7, 8, 9,10,
     7                      11,12,13,14,15,
     8                      16,17,18,19,20,
     9                      21,22,23,24,25 };
    10 
    11     1.打印主对角线上半面
    12     2.打印主对角线下半面
    13     3.打印次对角线上半面
    14     4.打印次对角线下半面
    15 
    16 */
    17 #define M 5
    18 #define N 5
    19 int main(void)
    20 {
    21     int i,j;
    22     int arr[M][N] = { 1, 2, 3, 4, 5,
    23                       6, 7, 8, 9,10,
    24                      11,12,13,14,15,
    25                      16,17,18,19,20,
    26                      21,22,23,24,25 };
    27 //打印主对角线上半面
    28     printf("------打印主对角线上半面------------
    ");//斜线扫描,访问2->8->14->20->3->9->15->4->10->5 ;关键点:每次扫描下一个元素,行数和列数的都增加1。最后控制列越界的情况即可。
    29     for(j = 1;j<=4;j -= 3)//列从第二列开始终止于第5列,
    30     {
    31         for(i = 0;i<=3;i++,j++)//行从第一行开始终止于第4行
    32         {
    33             if(j<=4)//j会出现越界的情况,将列始终控制在5列之内。
    34             printf("%d	",arr[i][j]);
    35             
    36         }
    37 
    38         putchar(10);
    39     }
    40     
    41 //打印主对角线下半面
    42     printf("------打印主对角线下半面------------
    ");//斜线扫描,访问6->12->18->24->11->17->23->16->22->21 ;关键点:每次扫描下一个元素,行数和列数的都增加1。最后控制行越界的情况即可。
    43     for(i = 1;i<=4;i-=3)
    44     {
    45         for(j = 0;j<=3;i++,j++)
    46         {
    47             if(i<=4)
    48             printf("%d	",arr[i][j]);
    49         }
    50         putchar(10);
    51     }
    52 //打印次对角线上半面
    53     printf("------打印次对角线上半面------------
    ");//斜线扫描,访问4->8->12->16->3->7->11->2->6->1 ;关键点:每次扫描下一个元素,行数+1和列数-1。最后控制列越界的情况即可。
    54     for(j = 3;j>=0;j += 3)
    55     {
    56         for(i = 0;i<=3;i++,j--)
    57         {
    58             if(j>=0)
    59             printf("%d	",arr[i][j]);
    60             
    61         }
    62 
    63         putchar(10);
    64     }
    65 //打印次对角线下半面
    66     printf("------打印次对角线下半面------------
    ");//斜线扫描,访问10->14->18->22->15->19->23->20->24->25 ;关键点:每次扫描下一个元素,行数+1和列数-1。最后控制行越界的情况即可。
    67     for(i = 1;i <= 4;i-=3)
    68     {
    69         for(j = 4;j>=1;i++,j--)
    70         { 
    71             if(i<=4)
    72             printf("%d	",arr[i][j]);
    73         }
    74         putchar(10);
    75     }
    76 
    77     return 0;
    78 }
    79 
    80 //总结,在斜线扫描的时候 1.打印对角线上半面的时候需要控制好列越界,打印对角线下半面的时候要控制好行越界
    81 //                         2.    造成越界的原因:内层循环在控制扫描走向的时候,行列同时在变动,但是内层循环的结束条件只控制了行或者列,而没有对行列的结束同时控制。
    82 //                         3.观察总结的1,2两条得到这样的结论:谁越界谁就是外层循环。例:列越界,就用列的下标做外层循环。行越界就用行的下标做外层循环。
  • 相关阅读:
    也八卦一把:李开复离开微软,投奔Google
    用于苹果OS Ⅹ Dashboard Widgets 的Google Map小部件
    下一代Hotmail和MSN Messenger最新界面截图
    Go2Map也开放了地图API
    《Excel与VBA程序设计》第三章及附录
    非广告: 365key的好处(随时收集)
    VS2005多线程程序在IDE下调试的一个问题
    买了《.net模式--架构、设计和过程》
    Expect 在网络管理中发挥着重要作用
    source insight 快捷键
  • 原文地址:https://www.cnblogs.com/wangchaomahan/p/9503864.html
Copyright © 2011-2022 走看看