基础练习 回形取数

本文介绍了一种从矩阵中按特定路径收集数值的方法——回形取数算法,并提供了详细的实现步骤及Java代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

 

转载于:https://www.cnblogs.com/lolybj/p/6496176.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值