蓝桥杯VIP试题 之 基础练习 回形取数 - JAVA

问题描述
  回形取数就是沿矩阵的边取数,若当前方向上无数可取或已经取过,则左转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 void main(String[] args) {
		Scanner sc=new Scanner(System.in);
		//接收输入
		int m=sc.nextInt();           
		int n=sc.nextInt(); 
		int[][] arr=new int[m][n];
		for(int i=0;i<m;i++) {
			for(int j=0;j<n;j++) {
				arr[i][j]=sc.nextInt();
			}
		}   
			
		//定义二维数组的索引,总数
		int i=0,j=0,count=0;
		//
		int length_L = 0,length_R = 0,length_m = m,length_n = n;
		while(true){
			//此时认为全部找完了.跳出循环
			if(count == m * n){
				break;
			}
			//四个while,分别输出于第一列,最后一行,最后一列,第一行,,,这样就完成了一圈,然后依靠外层循环,来找下一圈,
			//已经输出的数标记为-1,避免重复使用
			int x= length_L,y= length_R;
			while(true){
				if(arr[x][y] != -1){
					System.out.print(arr[x][y] + " ");
					arr[x][y] = -1;
					count++;
					if(x < length_m-1)
						x++;
					else
						break;
				}
			}
			//System.out.println("-----------");			
			while(true){
				if(arr[x][y] != -1){
					System.out.print(arr[x][y] + " ");
					arr[x][y] = -1;	
					count++;
				}
				if(y < length_n-1)
					y++;
				else
					break;
			}
			//System.out.println("-----------");			
			while(true){
				//System.out.println(x+" " + y+"..");
				if(arr[x][y] != -1){
					System.out.print(arr[x][y] + " ");
					count++;
					arr[x][y] = -1;		
				}
				if(x > length_R)
					x--;
				else
					break;
			}
			//System.out.println("-----------");
			while(true){
				//System.out.println(x+" " + y+"..");
				if(arr[x][y] != -1){
					System.out.print(arr[x][y] + " ");
					count++;					
				}
				if(y > length_R)
					y--;
				else
					break;
			}
			//找完外圈,减少范围
			length_L++;length_R++;
			length_m--;length_n--;
		}		
	}

}

测试

发布了462 篇原创文章 · 获赞 651 · 访问量 51万+

猜你喜欢

转载自blog.csdn.net/Czhenya/article/details/104570981