- 总结Java的OJ输入可行处理
- OJ入门级问题
- Java的输入输出
- 一般使用Scanner对象来读取控制台的输入
- 常见的处理:
- Scanner对象in
- in.hasNext()时读取in.next()或in.nextInt()或in.nextLine()
自己IDE测试读取输入,最后需手动输入文件结束符EOF
- 输入完数据集后回车一行
- 然后Mac–输入Control+d
- Windows系统下键入control+z,同时键入ctrl+z
例子
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65/**
* 输入描述:输入包括一行,一行中有4个正整数x1, k1, x2, k2(1 ≤ x1,x2 ≤ 10^9, 1 ≤ k1,k2 ≤ 50),以空格分割
* 如:1010 3 101010 2
*/
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String[] s = new String[4];
int index = 0;
while(in.hasNext()) {
s[index++] = in.next();
}
// ······
}
// ······
}
/**
* 输入描述:输入中有多组测试数据,每组测试数据为一个整数A(1 ≤ A ≤ 5000).
* 如:
> 5
> 3
*/
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
ArrayList<Integer> nums = new ArrayList<>();
while(in.hasNext()) {
nums.add(in.nextInt());
}
// ······
}
}
/**
* 输入描述:每组输入数据分为三行,第一行有两个数字n,m(0 ≤ n,m ≤ 10000),分别表示集合A和集合B的元素个数。后两行分别表示集合A和集合B。每个元素为不超过int范围的整数,每个元素之间有个空格隔开。
* 如:
> 3 3
> 1 3 5
> 2 4 6
*/
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
int count = 0;
Scanner in = new Scanner(System.in);
ArrayList<Integer> reads = new ArrayList<>();
while(in.hasNext()) {
reads.add(in.nextInt());
count++;
}
int[] a = new int[reads.size()-2];
for(int i=0; i<a.length; i++) {
a[i] = reads.get(i+2);
}
// ······
}
}
一些入门级问题
- 什么是“在线编程”?
- 在线编程,是利用“Online Judge”系统实时判断编程结果的一种训练/考试方式。“Online Judge”简称OJ,它有一个web界面与其用户交流,还有一个后台的编译系统,编译、运行用户提交的程序代码,并判断代码的正误。
- 什么是“在线编程”?
- “在线编程”有哪些限制?
- 你的程序(我们称之为“作业”)提交给 OJ系统后,OJ后台的编译器会编译该作业。如果通过,则运行这个作业。
- 限制1: 你的“作业”代码中,main()函数的返回值一定得是0 (即: return 0;)
- 限制2: 你的“作业”只允许从控制台读取数据(用C语言的scanf()、getchar()等;C++的cin)
- 限制3: 你的“作业”值允许输出到控制台(用C语言的printf()等,C++的cout);
- 限制4: 你的“作业”不允许读写文件系统(不能使用C语言的fprintf()等,不能使用C++的fstream等);
- “在线编程”有哪些限制?
- “在线编程(OJ)”系统如何判断提交的程序是否正确?
- 判断1: 编译不能有错误
- 判断2: OJ系统运行你的程序,你的程序的返回值必须是 0,如果不是0,说明程序运行时出现错误
- 判断3: 在OJ出题的人,会预先提供一些输入数据和输出结果;你的“作业”在运行时会被“喂”进上述输入数据,然后你的“作业”会输出信息,这些信息与上述“输出结果”【逐个字符】对比。如果对比完全一致,则判定你的“作业”正确。
- “在线编程(OJ)”系统如何判断提交的程序是否正确?
- 如何检查你自己的程序是否正确?
- 在题目中,会给你一套对应的“输入样例”和“输出样例”。你在运行自己的作业时,将“输入样例”喂给你的程序(用键盘,别用勺子!)得到的输出结果与“输出样例”一个字符都不差(空格、换行都算在内)完全相同,那么你的程序的输出格式就是正确的。
- 例子
- OJ中的一个题目:编写程序,计算输入的两个整数之和。
- 输入: 空格分隔的两个整数;
- 输出: 整数之和
- 出题者给的输入和输出 (这就是本课程中的“测试例”。测试例的具体内容,只有出题者才能看到)
- 输入样例:-3 1
- 输出样例:-2
- 你的程序如果输出以下信息,都是错的
- 错误1:输出结果前有空格 > -2
- 错误2:输出结果后有空格 >-2_
- 错误3:输出结果后有回车换行 > -2 >
- 错误4:有额外提示信息 >output: -2
- 错误5:输出的不是整数 >-2.000
- 有时出题者会给出一些极端的测试例,用于检测你的程序是否足够健壮:
- 输入:-999999999999999999999999999 1
- 输出:>?#$#%#@!%^
- OJ中的一个题目:编写程序,计算输入的两个整数之和。
- 如何检查你自己的程序是否正确?