• 十四:回形取数


    题目:回形取数

    回形取数就是沿矩阵的边取数,若当前方向上无数可取或已经取过,则左转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

     1 #include<stdio.h>
     2 int main(){
     3     int n,m,k=1;
     4     int i,j;
     5     int b[300][300];
     6     int c[500];
     7     scanf("%d%d",&n,&m);
     8 for(i=0;i<n;i++)
     9     for(j=0;j<m;j++){
    10         scanf("%d",&b[i][j]);
    11     }
    12     
    13     i=0,j=0;
    14     c[0]=b[0][0];
    15     b[0][0]=0;
    16     while(1){
    17         while(i+1<n&&b[i+1][j]){
    18             c[k++]=b[++i][j];
    19             b[i][j]=0;
    20         }
    21         if(k>=n*m) break;
    22         while(j+1<m&&b[i][j+1]){
    23             c[k++]=b[i][++j];
    24             b[i][j]=0;
    25         }
    26         if(k>=n*m) break;
    27             while(i-1>=0&&b[i-1][j]){
    28                 c[k++]=b[--i][j];
    29                 b[i][j]=0;
    30         }
    31         if(k>=n*m) break;
    32             while(j-1>=0&&b[i][j-1]){
    33                 c[k++]=b[i][--j] ;
    34                 b[i][j]=0;
    35         }
    36         if(k>=n*m) break;
    37     }
    38     for(i=0;i<k;i++){
    39             printf("%d ",c[i]);
    40         }
    41     return 0;
    42 }
  • 相关阅读:
    csu1217: 奇数个的那个数
    小试SAS 判别分析
    bfs poj2965
    STL set常用操作
    csu1002 A+B(III)
    HDOJ 1002 的几种方法
    SQL知识积累
    CSV文件格式介绍
    ASP.net Web Form 知识积累
    C# 位域[flags] 枚举
  • 原文地址:https://www.cnblogs.com/yuming226/p/8146429.html
Copyright © 2020-2023  润新知