问题描述
回形取数就是沿矩阵的边取数,若当前方向上无数可取或已经取过,则左转90度。一开始位于矩阵左上角,方向向下。
输入格式
输入第一行是两个不超过200的正整数m, n,表示矩阵的行和列。接下来m行每行n个整数,表示这个矩阵。
输出格式
输出只有一行,共mn个数,为输入矩阵回形取数得到的结果。数之间用一个空格分隔,行末不要有多余的空格。
样例输入
3 3
1 2 3
4 5 6
7 8 9
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 2
3 4
5 6
样例输出
1 3 5 6 4 2
1 import java.util.Scanner; 2 3 public class Main{ 4 public static void main(String[] args) { 5 int n,m; 6 Scanner input = new Scanner(System.in); 7 n = input.nextInt(); 8 m = input.nextInt(); 9 int[][] a= new int[n][m]; 10 for(int i=0;i<n;i++){ 11 for(int j=0;j<m;j++){ 12 a[i][j] = input.nextInt(); 13 } 14 } 15 int i=0,j=0; 16 int n1 = n; 17 int m1 = m; 18 int h = 0; 19 int k = 1; 20 if(n!=1){ 21 i = 1; 22 System.out.print(a[0][0]); 23 } 24 else{ 25 System.out.print(a[0][0]); 26 j = 1; 27 } 28 29 while(true){ 30 while(i<n1-1){ 31 System.out.print(" "+a[i][j]); 32 k++; 33 i++; 34 } 35 if(k==n*m-1||k==n*m){ 36 break; 37 } 38 while(j<m1-1){ 39 System.out.print(" "+a[i][j]); 40 k++; 41 j++; 42 } 43 if(k==n*m-1||k==n*m){ 44 break; 45 } 46 while(i>h){ 47 System.out.print(" "+a[i][j]); 48 k++; 49 i--; 50 } 51 if(k==n*m-1||k==n*m){ 52 break; 53 } 54 while(j>h+1){ 55 System.out.print(" "+a[i][j]); 56 k++; 57 j--; 58 } 59 if(k==n*m-1||k==n*m){ 60 break; 61 } 62 h++; 63 n1--; 64 m1--; 65 } 66 if(k==n*m-1) 67 System.out.print(" "+a[i][j]); 68 } 69 70 }