Acwing---429. 奖学金
- ①. 题目
- ②. 思路
- ③. 学习点
- ④. 代码实现
①. 题目
输入两个整数n和m,输出一个n行m列的矩阵,将数字 1 到 n*m 按照回字蛇形填充至矩阵中。
具体矩阵形式可参考样例。
输入格式
输入共一行,包含两个整数n和m。
输出格式
输出满足要求的矩阵。
矩阵占n行,每行包含m个空格隔开的整数。
数据范围
复制代码
1
21≤n,m≤100
输入样例:
复制代码
1
23 3
输出样例:
复制代码
1
2
3
4
51 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回路拐弯;
③. 学习点
④. 代码实现
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38import 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.内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复