zoukankan      html  css  js  c++  java
  • 基础练习 回形取数

    问题描述
      回形取数就是沿矩阵的边取数,若当前方向上无数可取或已经取过,则左转90度。一开始位于矩阵左上角,方向向下。
    输入格式
      输入第一行是两个不超过200的正整数m, n,表示矩阵的行和列。接下来m行每行n个整数,表示这个矩阵。
    输出格式
      输出只有一行,共mn个数,为输入矩阵回形取数得到的结果。数之间用一个空格分隔,行末不要有多余的空格。
    样例输入
    3 3
    1 2 3
    4 5 6
    7 8 9
    样例输出
    1 4 7 8 9 6 3 2 5
    样例输入
    3 2
    1 2
    3 4
    5 6
    样例输出
    1 3 5 6 4 2
     
    思路:以一个circle为循环标记,类似于往里边绕圈的感觉,每绕一圈,要遍历的元素显然越来越少,用四个for循环分别输出左边下边右边上边,不过这四种输出的方式比较难想,以 count < col * row 为循环结束标志即可。
     1 #include<stdio.h>
     2 #include<string.h>
     3 #include<stdlib.h>
     4 
     5 int main(void)
     6 {
     7     int row, col;
     8     int i, j,k,h;
     9     int** matrix;
    10 
    11     scanf("%d %d", &row, &col);
    12     matrix = (int **)malloc(sizeof(int*) * row);
    13     for (i = 0; i < row; i++)
    14     {
    15         matrix[i] = (int *)malloc(sizeof(int) * col);
    16     }
    17     for (i = 0; i < row; i++)
    18     {
    19         for (j = 0; j < col; j++)
    20         {
    21             scanf("%d", &matrix[i][j]);
    22         }
    23     }
    24 
    25     int circle = 0;
    26     int count = 0;
    27 
    28     while (count < row * col)
    29     {
    30         for (i = circle; i < row - circle && count < row * col; i++) //左边
    31         {
    32             printf("%d ", matrix[i][circle]);
    33             count += 1;
    34         }
    35         for (j = circle + 1; j < col - circle && count < row * col; j++) //下边
    36         {
    37             printf("%d ", matrix[row - 1 - circle][j]);
    38             count += 1;
    39         }
    40         for (k = row - 2 - circle; k >= circle && count < row * col; k--) //右边
    41         {
    42             printf("%d ", matrix[k][col - 1 - circle]);
    43             count += 1;
    44         }
    45         for (h = col - 2 - circle; h >= circle + 1 && count < row * col; h--) //上边
    46         {
    47             printf("%d ", matrix[circle][h]);
    48             count += 1;
    49         }
    50         circle += 1;
    51     }
    52     return 0;
    53 }
     
  • 相关阅读:
    [Todo]很不错的Java面试题类型整理,要看
    [Todo] Java并发编程学习
    自建一个Java Spring MVC项目
    [Todo] 乐观悲观锁,自旋互斥锁等等
    [Todo] Redis里面队列的两种模式,以及抢红包在Redis中的实现
    hdu 4704 同余定理+普通快速幂
    [置顶] ubuntu 和 win7 远程登陆 + vnc登陆
    mysql之触发器
    Jsoup API解析HTML中input标签
    IOS UITableView单条刷新,数据不刷新解决方案
  • 原文地址:https://www.cnblogs.com/ZhengLijie/p/12642556.html
Copyright © 2011-2022 走看看