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 }
  • 相关阅读:
    bzoj 3744: Gty的妹子序列 主席树+分块
    bzoj 3110: [Zjoi2013]K大数查询 树状数组套线段树
    bzoj 3041: 水叮当的舞步 迭代加深搜索 && NOIP RP++
    约瑟夫问题例题小结
    bzoj 3594: [Scoi2014]方伯伯的玉米田 dp树状数组优化
    人生第一场CTF的解题报告(部分)
    ZOJ 3811 Untrusted Patrol【并查集】
    POJ 2112: Optimal Milking【二分,网络流】
    Codeforces Round #277 (Div. 2 Only)
    POJ 2195 Going Home【最小费用流 二分图最优匹配】
  • 原文地址:https://www.cnblogs.com/wangchaomahan/p/9578956.html
Copyright © 2011-2022 走看看