您的位置:首页 > 其它

BASIC-25 VIP试题 回形取数

2017-12-19 14:49 99 查看
/*

问题描述

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

*/

#include <stdio.h>

void shuru(  int  , int n , int []
);

void hxqs(  int  , int n , int []
);

int main(void)

{

    int  m , n ;

    scanf("%d%d",&m , &n );

    int s[m]
;

    shuru(m , n, s);

    hxqs(m , n , s );

    return 0;

}

void shuru( int m , int n , int s[]
)

{

    int i , j ;

    for( i = 0 ;i < m ; i ++)

    {

        for( j = 0 ; j < n ; j ++)

        {

            scanf("%d", &s[i][j]);

        }

    }

}

void hxqs( int m , int n , int  s[]
)

{

    int hx = 0 ;  //计算 个数

    int x= -1 , y = 0 ; // 会回型位置

    

    while(hx < m * n)  

    {

        while(x + 1 < m &&s[x + 1][y] != -1)   // 竖直向下

        {

            printf("%d ", s[++x][y]);  

            s[x][y] = -1;  

            hx ++;  

        }  

        while(y + 1 < n && s[x][y + 1] != -1) // 左

        {  

            printf("%d ", s[x][++y]);  

            s[x][y] = -1;

            hx ++;

        }  

        while(x - 1 >= 0 && s[x - 1][y] != -1)   //上

        {  

            printf("%d ", s[--x][y]);  

            s[x][y] = -1;  

            hx ++;  

        }  

        while(y - 1 >= 0 && s[x][y - 1] != -1) //  右

        {  

            printf("%d ", s[x][--y]);  

            s[x][y] = -1;  

            hx ++;  

        }

    }        

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: