zoukankan      html  css  js  c++  java
  • 蓝桥杯 回形取数 模拟

    基础练习 回形取数  
    时间限制:1.0s   内存限制:512.0MB
       
    问题描述
      回形取数就是沿矩阵的边取数,若当前方向上无数可取或已经取过,则左转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

    思路:利用循环即可,这里可以利用bool数组控制它走内圈,因为外圈走过的都被标记了

    #include<iostream>
    using namespace std;
    const int N = 210;
    int g[N][N];
    bool flag[N][N];
    int main()
    {
        int n,m;
        cin>>n>>m;
        for(int i=1;i<=n;++i){
            for(int j=1;j<=m;++j){
                cin>>g[i][j];
            }
        }
        cout<<g[1][1];//结尾不能有多余空格,这里对第一个数做特殊处理
        int x=1,y=1;
        flag[x][y]=true;
        int num=1;
        while(num<n*m){
            while(x+1<=n&&!flag[x+1][y])cout<<" "<<g[++x][y],flag[x][y]=true,num++;
            while(y+1<=m&&!flag[x][y+1])cout<<" "<<g[x][++y],flag[x][y]=true,num++;
            while(x-1>=1&&!flag[x-1][y])cout<<" "<<g[--x][y],flag[x][y]=true,num++;
            while(y-1>=1&&!flag[x][y-1])cout<<" "<<g[x][--y],flag[x][y]=true,num++;
        } 
        return 0;
    }
    
  • 相关阅读:
    【zZ】OpenCV HOGDescriptor 参数图解
    [C]遍历目录下所有文件
    drawing
    转:基于用户投票的排名算法系列
    编码格式
    泛型
    接口
    隐藏方法不能实现多态性
    结构
    静态
  • 原文地址:https://www.cnblogs.com/clear-love/p/11295017.html
Copyright © 2011-2022 走看看