蛇形矩阵(java基础版)

题目

输入两个整数 n 和 m,输出一个 n行 m列的矩阵,将数字 11 到 n×m 按照回字蛇形填充至矩阵中。

具体矩阵形式可参考样例。

输入格式

输入共一行,包含两个整数 n 和 m。

输出格式

输出满足要求的矩阵。

矩阵占 n 行,每行包含 m 个空格隔开的整数。

数据范围

1≤n,m≤100

样例

输入样例:

3 3

输出样例:

1 2 3
8 9 4
7 6 5

题目思路

        该题目较为简单,只要将数字按照它要求的方式进行填入即可,则可以转化为在数组中进行填写数字,填写规则:先向右,当不能在向右填数字时,在向下填数字,当不能在向下填数字时,之后在向左填写数字,当不能在向左填数字时,在向上填写数字,当不能在向上填数字时,在向右填写数字……,如此不断循环,直到数字值k=a*b截至。如图所示,题目大致思路

源代码 

import java.util.Scanner;

public class Main{
    private static final int N = 110;
    //在这里一次定义:向右、向下、向左、向上
    private static final int[] dx={0,1,0,-1};
    private static final int[] dy={1,0,-1,0};
    private static int[][] g=new int[N][N];
     
    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);
        int a=sc.nextInt(),b=sc.nextInt();
        
        int x=0,y=0,k=1,t=0;
        while(true){
            g[x][y]=k;
            if(k==a*b) break;
            
            int tx=x+dx[t],ty=y+dy[t];
            if(tx>=0 && tx<a && ty>=0 && ty<b && g[tx][ty]==0){
                //当前可以沿着该方向继续前进
                x=tx;
                y=ty;
                k++;
            }else{
                //该进行改变方向
                t++;
                //当t>=4的时候应该从新从向左开始
                t%=4;
            }
            
        }
        
        //打印数组
        for(int i=0;i<a;i++){
            for(int j=0;j<b;j++){
                System.out.print(g[i][j]+" ");
            }
            System.out.println();
        }
    }
    
}

  • 11
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值