0
点赞
收藏
分享

微信扫一扫

蓝桥杯试题 基础练习 回形取数(java)

小龟老师 2022-01-23 阅读 82

问题描述

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

	public static void main(String[] args) {
		Scanner sc=new Scanner(System.in);
        int m=sc.nextInt();
        int n=sc.nextInt();
        int a[][]=new int[m][n];
        for (int i = 0; i < m; i++) {
			for (int j = 0; j < n; j++) {
				a[i][j]=sc.nextInt();
			}
		}
        int flag[][]=new int[m][n];//标记访问过的数组
        int sum=0;//这个记录输出的个数
        int i=0,j=0;
        
        while (sum<n*m) { //向下遍历
			while (i<m&&flag[i][j]!=1) {
				System.out.print(a[i][j]+" ");
				flag[i][j]=1;
				i++;sum++;
			}
			i--;j++;//i--是因为i在输出最后一行后又加了一,j++是因为下一个循环去到下一列
			while (j<n&&flag[i][j]!=1) {//向右走
				System.out.print(a[i][j]+" ");
				flag[i][j]=1;
				j++;sum++;
			}
			j--;i--;
			while (i>=0&&flag[i][j]!=1) {
				System.out.print(a[i][j]+" ");
				flag[i][j]=1;
				i--;sum++;
			}
			i++;j--;
			while (j>=0&&flag[i][j]!=1) {
				System.out.print(a[i][j]+" ");
				flag[i][j]=1;
				j--;sum++;
			}
			j++;i++;
		}
	}

}

 

举报

相关推荐

0 条评论