zoukankan      html  css  js  c++  java
  • [蓝桥杯][基础训练]回形取数

    Description

    回形取数就是沿矩阵的边取数,若当前方向上无数可取或已经取过,则左转90度。一开始位于矩阵左上角,方向向下。

    Input

    输入第一行是两个均不超过200的正整数m, n,表示矩阵的行和列。接下来m行每行n个整数,表示这个矩阵。
    

    Output

    输出只有一行,共mn个数,为输入矩阵回形取数得到的结果。数之间用一个空格分隔,行末不要有多余的空格。
    

    Sample Input

    3 3
    1 2 3
    4 5 6
    7 8 9
    

    Sample Output

    1 4 7 8 9 6 3 2 5
    


     1 #include<stdio.h>
     2 int book[201][201];//用来标记走过的路 
     3 int main(){
     4     int dir[4][2]={1,0,0,1,-1,0,0,-1};//用于转向的数组 
     5     int n,m;//行,列 
     6     int map[201][201];//存储地图信息 
     7     int dx=0,dy=1;//出发点 
     8     int k=0;//与转向数组一起用 
     9     scanf("%d%d",&n,&m);
    10     int num=n*m,sum=0;//num表示一共要输出这么多的数
    11                       //sum表示当前一共输出了多少数 
    12     for(int i=1;i<=n;i++){
    13         for(int j=1;j<=m;j++){
    14             scanf("%d",&map[i][j]);
    15         }
    16     }
    17     while(1){//一直进行,输出数字的量达到num才停止 
    18         dx+=dir[k%4][0];//开始走 
    19         dy+=dir[k%4][1];
    20         if(dx>=1&&dx<=n&&dy>=1&&dy<=m&&!book[dx][dy]){
    21         //如果还在地图里,并且这里没有走过 
    22             printf("%d",map[dx][dy]);//就输出这里的数 
    23             sum++;//输出数量加一 
    24             if(sum==num)//达到数的总量后,跳出循环 
    25                 break;
    26             else    //如果没达到总量
    27             printf(" "); //就输出空格
    28                 //因为最后一个数字后不能加空格,所以这样输出空格 
    29             book[dx][dy]=1;//输出后标记 
    30         }
    31         else{//如果dxdy不符合条件了 
    32             dx-=dir[k%4][0];//就退回原来的地方 
    33             dy-=dir[k%4][1];
    34             k++;//k自增,这时转向数组发挥作用,开始转向 
    35         }
    36     }
    37     return 0;
    38 }

     



    这个还算简洁吧,顺时针逆时针都可以,起点也可以选,以后这样的题就这样写了

  • 相关阅读:
    pip 8 安装
    zabbix server配置文件
    双代号网络图、双代号时标网络图
    logrotate
    tsql 执行存储过程
    dos 加用户
    Visual Studio (VS IDE) 你必须知道的功能和技巧
    格式化数字字符串 与C#变量
    .NET中的字符串你了解多少?
    新手如何有效地学习.NET
  • 原文地址:https://www.cnblogs.com/fate-/p/12266740.html
Copyright © 2011-2022 走看看