猿问

我想在 android 中生成四个不同的随机数,但它们的总数不应大于指定范围,如 0 到 69

这是我的 Button OnClick() 方法单击按钮时所有四个随机数都将显示在 Logcat 上


public void onClick(View v) {


            /*  the Code for Four Random Numbers*/


            final Random random = new Random();


            final Set<Integer> mySet = new HashSet<>();


            while (mySet.size() < 4) {


                mySet.add(random.nextInt(69) + 1);

            }


            // Now Adding it to the ArrayList                


           ArrayList<Integer> Elements =  new ArrayList<>(mySet);

            Log.i("Elements","A:" + Elements.get(0));

            Log.i("Elements","B:" + Elements.get(1));

            Log.i("Elements","C:" + Elements.get(2));

            Log.i("Elements","D:" + Elements.get(3));


        }

    });

输出看起来像这样(我只是举一个例子,每次运行应用程序时,每种情况都不同) A : 11 B : 28 C : 57 D : 1


现在的问题是:所有数字的总和大于指定的范围 0 到 69


当我们添加等于 97 的 A、B、C、D 值时


哪个大于指定范围 0 到 69


所以我想要这样的随机数:


当我们添加 A、B、C、D 时,它们的总和不应超过 69 的范围


所以我的问题是我该怎么做?请帮忙!!我被困在代码的那部分,我找不到解决方案


千巷猫影
浏览 363回答 3
3回答

繁星coding

除了其他人的建议之外,您可能还想阅读以下内容:找到总和为特定值的所有子集首先,请注意这与子集求和问题有些相似。给定 1 到 69 之间所有数字的集合,您正在寻找其中 4 个数字的子集,加起来为 69。对于任何自然数,只有有限数量的此类集合(尽管它显然最终在计算上变得不可行)枚举所有这些)。无论哪种方式,无论您使用什么算法,您的答案都保证是这些集合之一。链接的问题显示了用于查找加起来为特定值的所有子集的代码。一旦你有了这个,只需过滤所有长度为 4 的子集并随机选择其中一个。

波斯汪

有两种方法,取决于您想如何做:重新排列随机数,直到达到有效的总和。这将是真正的随机。更改第 2、3、4 等随机数的最大值,使其不能太大。然而,这将把它从每个数字都相同的可能性变成更小的数字更有可能。

守着一只汪

这是一个棘手的问题。这些没有提到样本空间,因此可以假设它必须是各种有效整数。生成任意数量的有符号 32 位整数。这将是 –2147483648 和 2147483647,直到您有四个唯一的总和介于 0 和 69 之间。
随时随地看视频慕课网APP

相关分类

Java
我要回答