Java 无法解决简单的DMOJ数学问题?
我试图解决这个问题: 我针对这个问题的实际代码接收到测试用例的无效返回、InputMismatchException和0/1521的分数。通过在页面上手动输入示例输入等输入,代码运行良好,但DMOJ上的在线法官认为它不正确。下面是我的代码供参考Java 无法解决简单的DMOJ数学问题?,java,Java,我试图解决这个问题: 我针对这个问题的实际代码接收到测试用例的无效返回、InputMismatchException和0/1521的分数。通过在页面上手动输入示例输入等输入,代码运行良好,但DMOJ上的在线法官认为它不正确。下面是我的代码供参考 import java.util.*; public class Main { public static void main(String[] args) { Scanner input = new Scanner (Syst
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner input = new Scanner (System.in);
int l = input.nextInt();
for(int i=0;i<l;i++){
int a=input.nextInt();
int b=input.nextInt();
System.out.println(a+b);
}
}
}
我发现,通过打印2-20,N次的任何相同数字,可以得到部分标记。通过打印数字2n次,我得到16/1521的分数。我用2-20之间的每一个值进行了此操作,发现通过打印11次N,我可以获得最高分数152/1521,但我仍然无法达到1521/1521
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner input = new Scanner (System.in);
int l = input.nextInt();
for(int i=0;i<l;i++){
System.out.println("11");
}
}
}
我是如何成功解决这个问题的?我让我的同龄人和我的计算机科学老师一起解决这个问题,但我们都没有成功 这是一个非常愚蠢的练习。 诀窍在于数字可能不是数字。它们似乎也以英文和法文文本的形式出现。更糟糕的是,它们也可能以中国符号的形式出现 我自己无法解决这个问题,但我使用了python中的一个解决方案: 我从该实现派生的Java解决方案是:
import java.io.*;
import java.util.*;
public class Main {
private static final String[] EN_VALUES = new String[] { "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten" };
private static final String[] FR_VALUES = new String[] { "un", "deux", "trois", "quatre", "cinq", "seis", "sept", "huit", "neuf", "dix" };
private static final String[] CN_VALUES = new String[] { "一", "二", "三", "四", "五", "六", "七", "八", "九", "十"};
public static void main(String[] args) throws IOException {
try (BufferedReader in = new BufferedReader(new InputStreamReader(System.in, "UTF-8"))) {
int lineCount = Integer.parseInt(in.readLine());
for (int i = 0; i < lineCount; i++) {
String line = in.readLine();
String[] token = line.split("\\s+");
System.out.println(parseNum(token[0]) + parseNum(token[1]));
}
}
}
private static int parseNum(String token) {
if (token.matches("\\d+")) {
return Integer.parseInt(token);
}
for (int i = 0; i < EN_VALUES.length; i++) {
if (token.equalsIgnoreCase(EN_VALUES[i]) || token.equalsIgnoreCase(FR_VALUES[i]) || token.equalsIgnoreCase(CN_VALUES[i])) {
return i + 1;
}
}
throw new IllegalStateException();
}
}
我在描述中找不到输入中可能出现的符号的任何线索。响应的剥离输出并没有提供有意义的提示,至少对java来说是这样。为什么不在输入中添加一些罗马数字呢?一、 二、三、四……这真是一个愚蠢的练习。 诀窍在于数字可能不是数字。它们似乎也以英文和法文文本的形式出现。更糟糕的是,它们也可能以中国符号的形式出现 我自己无法解决这个问题,但我使用了python中的一个解决方案: 我从该实现派生的Java解决方案是:
import java.io.*;
import java.util.*;
public class Main {
private static final String[] EN_VALUES = new String[] { "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten" };
private static final String[] FR_VALUES = new String[] { "un", "deux", "trois", "quatre", "cinq", "seis", "sept", "huit", "neuf", "dix" };
private static final String[] CN_VALUES = new String[] { "一", "二", "三", "四", "五", "六", "七", "八", "九", "十"};
public static void main(String[] args) throws IOException {
try (BufferedReader in = new BufferedReader(new InputStreamReader(System.in, "UTF-8"))) {
int lineCount = Integer.parseInt(in.readLine());
for (int i = 0; i < lineCount; i++) {
String line = in.readLine();
String[] token = line.split("\\s+");
System.out.println(parseNum(token[0]) + parseNum(token[1]));
}
}
}
private static int parseNum(String token) {
if (token.matches("\\d+")) {
return Integer.parseInt(token);
}
for (int i = 0; i < EN_VALUES.length; i++) {
if (token.equalsIgnoreCase(EN_VALUES[i]) || token.equalsIgnoreCase(FR_VALUES[i]) || token.equalsIgnoreCase(CN_VALUES[i])) {
return i + 1;
}
}
throw new IllegalStateException();
}
}
我在描述中找不到输入中可能出现的符号的任何线索。响应的剥离输出并没有提供有意义的提示,至少对java来说是这样。为什么不在输入中添加一些罗马数字呢?一、 二、三、四……真是愚蠢的运动。在结果中,它们只显示程序输出的单个字符。我试着一个接一个地打印输入的每个字符,发现输入包含英语单词“一”、“二”等,然后放弃了。这真是一个愚蠢的练习。在结果中,它们只显示程序输出的单个字符。我试着一个接一个地打印输入的每个字符,发现输入包含英语单词“一”、“二”等,然后放弃了。