我是靠谱客的博主 精明魔镜,最近开发中收集的这篇文章主要介绍Acwing---756. 蛇形矩阵(Java)_寒假每日一题活动①. 题目②. 思路③. 学习点④. 代码实现,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

Acwing---429. 奖学金

  • ①. 题目
  • ②. 思路
  • ③. 学习点
  • ④. 代码实现

①. 题目

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

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

输入格式

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

输出格式

输出满足要求的矩阵。

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

数据范围

1≤n,m≤100

输入样例:

3 3

输出样例:


1 2 3
8 9 4
7 6 5

②. 思路

  • 使用两个一维数组存储int[] dx= {-1,0,1,0},dy= {0,1,0,-1},右下左上移动值
  • 定义一个方向direct=1作为dx dy的下标,先向右走,如果越边界或者访问过,进行d=(d+1)%4回路拐弯;

在这里插入图片描述

③. 学习点

④. 代码实现

import java.util.*;

public class Acwing_756_蛇形矩阵 {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		int n=scanner.nextInt();
		int m=scanner.nextInt();
		
		//定义移动的偏移量
		int[] dx= {-1,0,1,0},dy= {0,1,0,-1};
		int d=1 ,x=0,y=0;
		//创建二维数组结果
		int[][] res=new int[n][m];
		//从1开始 遍历到m*n
		for(int i=1;i<=m*n;i++) {
		//先进行移动 判断新的点判断越界  或者是否已经访问过
			int a=x+dx[d];
			int b=y+dy[d];
			//判断越界 或者是否已经访问过
			if(a<0||a>=n ||b<0||b>=m ||res[a][b]!=0) {
				d=(d+1)%4;
			}
			//若没有,直接移动到新的节点
			res[x][y]=i;
			x+=dx[d];
			y+=dy[d];
		}
		
		for(int [] nums:res) {
			for(int num:nums) {
					System.out.print(num+" ");
			}
			System.out.println();
		}	
	}
}

在这里插入图片描述

最后

以上就是精明魔镜为你收集整理的Acwing---756. 蛇形矩阵(Java)_寒假每日一题活动①. 题目②. 思路③. 学习点④. 代码实现的全部内容,希望文章能够帮你解决Acwing---756. 蛇形矩阵(Java)_寒假每日一题活动①. 题目②. 思路③. 学习点④. 代码实现所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(48)

评论列表共有 0 条评论

立即
投稿
返回
顶部