Java 无法解决简单的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

我试图解决这个问题:

我针对这个问题的实际代码接收到测试用例的无效返回、InputMismatchException和0/1521的分数。通过在页面上手动输入示例输入等输入,代码运行良好,但DMOJ上的在线法官认为它不正确。下面是我的代码供参考

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来说是这样。为什么不在输入中添加一些罗马数字呢?一、 二、三、四……

真是愚蠢的运动。在结果中,它们只显示程序输出的单个字符。我试着一个接一个地打印输入的每个字符,发现输入包含英语单词“一”、“二”等,然后放弃了。这真是一个愚蠢的练习。在结果中,它们只显示程序输出的单个字符。我试着一个接一个地打印输入的每个字符,发现输入包含英语单词“一”、“二”等,然后放弃了。