这是我的 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 的范围所以我的问题是我该怎么做?请帮忙!!我被困在代码的那部分,我找不到解决方案
3 回答
繁星coding
TA贡献1797条经验 获得超4个赞
除了其他人的建议之外,您可能还想阅读以下内容:找到总和为特定值的所有子集
首先,请注意这与子集求和问题有些相似。给定 1 到 69 之间所有数字的集合,您正在寻找其中 4 个数字的子集,加起来为 69。对于任何自然数,只有有限数量的此类集合(尽管它显然最终在计算上变得不可行)枚举所有这些)。无论哪种方式,无论您使用什么算法,您的答案都保证是这些集合之一。
链接的问题显示了用于查找加起来为特定值的所有子集的代码。一旦你有了这个,只需过滤所有长度为 4 的子集并随机选择其中一个。
波斯汪
TA贡献1811条经验 获得超4个赞
有两种方法,取决于您想如何做:
重新排列随机数,直到达到有效的总和。这将是真正的随机。
更改第 2、3、4 等随机数的最大值,使其不能太大。然而,这将把它从每个数字都相同的可能性变成更小的数字更有可能。
守着一只汪
TA贡献1872条经验 获得超3个赞
这是一个棘手的问题。这些没有提到样本空间,因此可以假设它必须是各种有效整数。生成任意数量的有符号 32 位整数。这将是 –2147483648 和 2147483647,直到您有四个唯一的总和介于 0 和 69 之间。
添加回答
举报
0/150
提交
取消