zoukankan      html  css  js  c++  java
  • 二维数组斜线扫描2(方法逻辑清晰)

     1 #include <stdio.h>
     2 
     3 #define M 10     
     4 #define N 10     
     5 int main(void)
     6 {
     7     int i,j;
     8     //初始化二维数组
     9     int arr[M][N] = {
    10         {1,2,3,4,5,6,1,0,0,1},
    11         {1,2,3,4,1,6,1,1,0,1},
    12         {1,5,3,4,7,1,8,8,1,8},
    13         {1,2,0,4,5,6,1,0,0,1},
    14         {0,2,3,4,5,8,1,1,1,1},
    15         {1,0,3,4,8,6,1,1,1,0},
    16         {1,2,1,4,5,6,0,0,0,1},
    17         {1,2,3,0,5,8,1,0,1,1},
    18         {1,2,3,4,5,6,1,0,0,1},
    19         {0,2,3,4,5,6,1,0,0,1}
    20     };
    21 /*
    22 功能:测试主对角线上半面的数字(斜线扫描)
    23 
    24 特征1: j起始于1,终止于N-1;i起始于0,每次终止不同,但归纳后终止于:M-1-j;(由此写出循环)
    25 特征2:i++,j++ ,即行列同时+1  (由此确定打印的方向)
    26 总结: 根据特征1和特征2 得出每次扫描的元素为:arr[i][j];  (由此写出打印的元素)
    27 */
    28     printf("---------------测试主对角线上半面的数字(斜线扫描)---------------------
    ");    
    29     for(j = 1;j<N;j++)
    30     {
    31         for(i = 0;i<M-j;i++)
    32         {
    33             printf("%d	",arr[i][i+j]);
    34         }
    35         putchar(10);
    36     }
    37     printf("-----------------测试主对角线下半面的数字(斜线扫描)--------------------
    ");
    38 /*
    39 功能:测试主对角线下半面的数字(斜线扫描)
    40 
    41 特征1: i起始于1,终止于M-1;j起始于0,每次终止不同,但归纳后终止于:N-i-1;(由此写出循环)
    42 特征2:i++,j++ ,即行列同时+1  (由此确定打印的方向)
    43 总结: 根据特征1和特征2 得出每次扫描的元素为:arr[j+i][j];  (由此写出打印的元素)
    44 */
    45     for(i = 1;i<M;i++)
    46     {
    47         for(j = 0;j<N-i;j++)
    48         {
    49             printf("%d	",arr[j+i][j]);    
    50         }
    51         putchar(10);
    52     }
    53     printf("-----------------测试次对角线上半面的数字(斜线扫描)--------------------
    ");
    54 /*
    55 功能:测试次对角线上半面的数字(斜线扫描)
    56 
    57 特征1: j起始于N-2,终止于0 ; i起始于0,每次终止不同,但归纳后终止于:M-(N-j-1);   (由此写出循环)
    58 特征2:i++,j-- ,即行列同时变化,行+1,列-1  (由此确定打印的方向)
    59 总结: 根据特征1和特征2 得出每次扫描的元素为:arr[i][j-i];  (由此写出打印的元素)
    60 */
    61     for(j = N-2;j>=0;j--)
    62     {
    63         for(i = 0;i<M-(N-j-1);i++)
    64         {
    65             printf("%d	",arr[i][j-i]);    
    66         }
    67         putchar(10);
    68     }
    69 
    70     printf("-----------------测试次对角线下半面的数字(斜线扫描)--------------------
    ");
    71 /*
    72 功能:测试次对角线下半面的数字(斜线扫描)
    73 
    74 特征1: i起始于1,终止于M-1 ; j起始于N-1,每次终止不同,但归纳后终止于:i;   (由此写出循环)
    75 特征2:i++,j-- ,即行列同时变化,行+1,列-1  (由此确定打印的方向)
    76 总结: 根据特征1和特征2 得出每次扫描的元素为:arr[N-j+i-1][j];  (由此写出打印的元素)
    77 */
    78     for(i = 1;i<M;i++)
    79     {
    80         for(j = N-1;j>=i;j--)
    81         {
    82             printf("%d	",arr[N-j+i-1][j]);    
    83         }
    84         putchar(10);
    85     }
    86 
    87     return 0;
    88 }
  • 相关阅读:
    洛谷p1017 进制转换(2000noip提高组)
    Personal Training of RDC
    XVIII Open Cup named after E.V. Pankratiev. Grand Prix of Eurasia
    XVIII Open Cup named after E.V. Pankratiev. Grand Prix of Peterhof.
    Asia Hong Kong Regional Contest 2019
    XVIII Open Cup named after E.V. Pankratiev. Grand Prix of Siberia
    XVIII Open Cup named after E.V. Pankratiev. Ukrainian Grand Prix.
    XVIII Open Cup named after E.V. Pankratiev. GP of SPb
    卜题仓库
    2014 ACM-ICPC Vietnam National First Round
  • 原文地址:https://www.cnblogs.com/wangchaomahan/p/9578956.html
Copyright © 2011-2022 走看看