基础练习 回形取数 (循环 + Java 输入输出外挂)
2023-09-11 14:17:18 时间
基础练习 回形取数
时间限制:1.0s 内存限制:512.0MB
问题描述
回形取数就是沿矩阵的边取数,若当前方向上无数可取或已经取过,则左转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
析:看起来挺简单,只要按照它的要求输出,就可以了,主要是判断在拐弯的时候,只要前面已经出界,或者是已经走过了,就左拐,如果还走过,再左拐,总能够全部走完,但是Java 实在是太慢了,尤其是输入和输出,以至于我一直都是 90 ,后来加了一个输出外挂,才 100,由于输入外挂比输出要长,所以不爱写,但是C++ 是真的快,几乎就是 0 ms
代码如下:
import java.util.*; import java.io.*; public class Main{ public static int [][]a; public static int []dr = {1, 0, -1, 0}; public static int []dc = {0, 1, 0, -1}; public static int n, m; public static boolean isIn(int r, int c){ return r >= 0 && r < n && c >= 0 && c < m; } public static void main(String []args){ Scanner cin = new Scanner(System.in); n = cin.nextInt(); m = cin.nextInt(); a = new int[n+5][m+5]; for(int i = 0; i < n; ++i) for(int j = 0; j < m; ++j) a[i][j] = cin.nextInt(); PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out))); out.print(a[0][0]); a[0][0] = -1; int idx = 0, r = 0, c = 0, cnt = 0; while(++cnt < m * n){ while(true){ int x = r + dr[idx]; int y = c + dc[idx]; if(isIn(x, y) && a[x][y] != -1){ out.print(" " + a[x][y]); a[x][y] = -1; r = x; c = y; break; } ++idx; if(idx >= 4) idx -= 4; } } out.println(); out.flush(); } }
相关文章
- java集合-遍历arraylist-for循环-从指定下标开始遍历-for的用法
- [Java 基础] 使用java.util.zip包压缩和解压缩文件
- 循环录(输)入 java 课的学生成绩(5个学生),统计分数大于等于 80 分的学生
- Java实现 LeetCode 641 设计循环双端队列(暴力)
- Java实现 LeetCode 136 只出现一次的数字
- java中ThreadLocal类的详细介绍(详解)
- java实现排他平方数
- java实现第六届蓝桥杯循环节长度
- java 11 Java Flight Recorder
- 【JAVA】java中的length和length()
- Java两种方法实现循环报数
- java 11 标准Java异步HTTP客户端
- Android Studio — Could not determine java version from ‘11.0.8‘. The project uses Gradle version wh
- 【java】Java ArrayList
- Java中String类的concat方法___java的String字符串的concat()方法连接字符串和“+“连接字符串解释
- Java多线程为什么使用while循环来调用wait方法
- Java 创建数组的方式, 以及各种类型数组元素的默认值
- Java开发技术之成为高级java工程师必须学习的三个技术
- java线程池异步
- 【Java 基础】选择、循环结构语句详解
- java - 详解 Java 17 中新推出的密封类
- 【java】Java线程池实现原理及业务中的实践
- 【Java】Spring Boot 教程
- java学习笔记——引用类型用法总结