zoukankan      html  css  js  c++  java
  • 剑指Offer

    剑指Offer - 九度1391 - 顺时针打印矩阵
    2013-11-24 04:55
    题目描述:

    输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵:

    1 2 3 4

    5 6 7 8

    9 10 11 12

    13 14 15 16

    则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.

    输入:

    输入可能包含多个测试样例,对于每个测试案例,

    输入的第一行包括两个整数m和n(1<=m,n<=1000):表示矩阵的维数为m行n列。

    接下来的m行,每行包括n个整数,表示矩阵的元素,其中每个元素a的取值范围为(1<=a<=10000)。

    输出:

    对应每个测试案例,输出一行,

    按照从外向里以顺时针的顺序依次打印出每一个数字,每个数字后面都有一个空格。

    样例输入:
    4 4
    1 2 3 4
    5 6 7 8
    9 10 11 12
    13 14 15 16
    
    样例输出:
    1 2 3 4 8 12 16 15 14 13 9 5 6 7 11 10 
    题意分析:
      很无聊但很考验细心程度的一道题。一圈一圈地往里打印,注意循环方向,注意下标别多1或者少1。一次ac还是有难度的。
      时间复杂度O(m * n),空间复杂度O(1)。
     1 // 652496    zhuli19901106    1391    Accepted    点击此处查看所有case的执行结果    4968KB    961B    520MS
     2 // 201311170129
     3 #include <cstdio>
     4 using namespace std;
     5 
     6 int m, n;
     7 const int MAXN = 1005;
     8 int a[MAXN][MAXN];
     9 
    10 int main()
    11 {
    12     int i, j;
    13     
    14     while(scanf("%d%d", &m, &n) == 2){
    15         if(m <= 0 || n <= 0){
    16             continue;
    17         }
    18         for(i = 0; i < m; ++i){
    19             for(j = 0; j < n; ++j){
    20                 scanf("%d", &a[i][j]);
    21             }
    22         }
    23         
    24         for(i = 0; (i <= m - 1 - i) && (i <= n - 1 - i); ++i){
    25             for(j = i; j <= n - 1 - i; ++j){
    26                 printf("%d ", a[i][j]);
    27             }
    28             if(i + 1 <= m - 1 - i - 1){
    29                 for(j = i + 1; j <= m - 1 - i - 1; ++j){
    30                     printf("%d ", a[j][n - 1 - i]);
    31                 }
    32             }
    33             if(i < m - 1 - i){
    34                 for(j = n - 1 - i; j >= i; --j){
    35                     printf("%d ", a[m - 1 - i][j]);
    36                 }
    37             }
    38             if(i + 1 <= m - 1 - i && i < n - 1 - i){
    39                 for(j = m - 1 - i - 1; j >= i + 1; --j){
    40                     printf("%d ", a[j][i]);
    41                 }
    42             }
    43         }
    44         printf("
    ");
    45     }
    46     
    47     return 0;
    48 }
  • 相关阅读:
    title中的小图标
    JS
    浏览器的差距
    浏览器的前缀
    布局
    。。。 付解决浏览器兼容问题的两种方法
    form标签
    position讲解
    标题文档流与浮动
    css层叠问题
  • 原文地址:https://www.cnblogs.com/zhuli19901106/p/3439726.html
Copyright © 2011-2022 走看看