(蓝桥杯)试题 算法训练 回形取数

Posted nuist__NJUPT

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了(蓝桥杯)试题 算法训练 回形取数相关的知识,希望对你有一定的参考价值。

试题 算法训练 回形取数

  • 资源限制
  • 时间限制: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
import java.util.Scanner;

public class Main {
    public static int count  = 0 ;
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in) ;
        int m = input.nextInt() ;
        int n = input.nextInt() ;
        int [][] matrix = new int [m][n] ;
        for(int i=0; i<m; i++){
            for(int j=0; j<n; j++){
                matrix[i][j] = input.nextInt() ;
            }
        }
        int leftRow = 0, leftColumn = 0, rightRow = m-1, rightColumn = n-1 ;
        while((leftRow <= rightRow) && (leftColumn <= rightColumn)){
            int r = leftRow , c = leftColumn ;
            while(r <= rightRow){
                    System.out.print(matrix[r++][c] + " ") ;
                    count ++ ;
            }
            if(count == m*n){
                break ;
            }
                r = rightRow;
                c++;
            while(c <= rightColumn){
                System.out.print(matrix[r][c++] + " ") ;
                count ++ ;
            }
            if(count == m*n){
                break ;
            }
                c = rightColumn;
                r--;
            while(r >= leftRow){
                System.out.print(matrix[r--][c] + " ") ;
                count ++ ;
            }
            if(count == m*n){
                break ;
            }
                r = leftRow;
                c--;
            while(c > leftColumn){
                System.out.print(matrix[r][c--] + " ") ;
                count ++ ;
            }
            if(count == m*n){
                break ;
            }
            leftRow ++;
            leftColumn ++ ;
            rightRow -- ;
            rightColumn -- ;
        }
    }
}

以上是关于(蓝桥杯)试题 算法训练 回形取数的主要内容,如果未能解决你的问题,请参考以下文章

蓝桥杯 基础练习 BASIC-25 回形取数

[蓝桥杯][基础练习VIP]回形取数

回形取数(蓝桥杯)c++?

[蓝桥杯Python]算法练习算法基础算法训练算法模板(持续更新)

基础训练 回形取数

十四:回形取数