首页 > 解决方案 > 我尝试滚动两个骰子的结果 - 有错误吗?

问题描述

我试图解决的问题是返回两个骰子总和的最可能结果。输入是分隔的每个裸片空间上的边数。输出是最可能的结果列表,按升序排列。因此,对于输入“6 6”,我们应该期待 7。这是通过绘制一个包含第 6 行和第 6 列的表格并计算总和 7 比任何其他总和出现得更多来找到的。下面的代码适用于所有显示的测试用例,但未通过评分器(边缘用例,更大的输入)。你能想到问题可能是什么吗?

根据该网站,“如果您的程序在秘密测试用例中被拒绝,那么您的程序中很可能存在严重错误”。

package xyz;

import java.io.*;
import java.util.*;

public class dicecup {

    public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        String s = reader.readLine();
        String[] parts = s.split(" ");
        int n = Integer.parseInt(parts[0]); // sides on die one
        int m = Integer.parseInt(parts[1]); // sides on die two
        int min = n;
        if (m < n) {
            min = m;
        }
        ArrayList<Integer> sums = new ArrayList<Integer>();
        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= m; j++) {
                sums.add(i + j);

            }
        }
        ArrayList<String> strings = new ArrayList<String>();
        for (int i = 0; i < sums.size(); i++) {
            strings.add(sums.get(i).toString());
        }
        int max = min;
        ArrayList<String> outputs = new ArrayList<String>();
        for (int i = 0; i < strings.size(); i++) {
            if (Collections.frequency(strings, strings.get(i)) == max) {
                outputs.add(strings.get(i));
            }

        }

        HashSet<String> uniqueValues = new HashSet<>(outputs);
        for (String str : uniqueValues) {
            System.out.println(str);
        }
    }
}

标签: javaarraylistcollectionsprobabilitydice

解决方案


推荐阅读