gpt4 book ai didi

java - 计算一组数字的所有 1-off 组合

转载 作者:行者123 更新时间:2023-12-02 05:32:04 25 4
gpt4 key购买 nike

北卡罗来纳州彩票提供多种抽奖游戏,其中两种是选 3 和选 4。您分别选择 0 到 9(含)之间的 3 或 4 个数字,并且数字可以重复(例如 9-9) -9 是有效的组合)。在本示例中,我将使用“选择 3”,因为它更容易使用,但我试图使其成为一个通用解决方案,可以处理任意数量的数字。

“选 3”和“选 4”的特点之一是“1-OFF”,这意味着如果至少有一个开奖号码比您彩票上的号码大 1 或小 1,您就中奖。

例如,假设您选择了“选 3”,并选择了 5-5-5 作为号码。至少有一个数字必须是 1-off 才能获胜(因此,如果您以这种方式玩游戏,5-5-5 不会赢得任何奖金)。获胜组合将是:

1 Number    2 Numbers    3 Numbers
-------- --------- ---------
4-5-5 4-4-5 4-4-4
5-4-5 5-4-4 6-6-6
5-5-4 4-5-4 4-4-6
6-5-5 6-6-5 4-6-6
5-6-5 5-6-6 4-6-4
5-5-6 6-5-6 6-4-4
4-5-6 6-6-4
6-5-4 6-4-6
6-4-5
5-6-4
5-4-6
4-6-5

(我认为这就是所有组合,但你明白了)。

我能想到的最“有效”的解决方案是使用数组来定义更改哪些数字以及如何更改:

int[][] alterations = {
// 1 digit
{-1, 0, 0}, {0, -1, 0}, {0, 0, -1}, {1, 0, 0}, {0, 1, 0}, {0, 0, 1},
// 2 digits
{-1, -1, 0}, ...
};

然后根据每个变更数组修改数字:

int[] numbers = {5, 5, 5};
for(int i = 0; i < alterations.length; i++) {
int[] copy = Arrays.copyOf(numbers, numbers.length);
for(int j = 0; j < alterations[i].length; j++) {
// note: this logic does not account for the numbers 0 and 9:
// 1 down from 0 translates to 9, and 1 up from 9 translates
// to 0, but you get the gist of how this is supposed to work
copy[j] += alterations[i][j];
}
printArray(copy);
}

...

private static void printArray(int[] a) {
String x = "";
for(int i : a)
x += i + " ";

System.out.println(x.trim());
}

但我想知道是否有更好的方法来做到这一点。有没有人遇到过类似的事情并有更好的想法?

最佳答案

听起来您正在寻找回溯,因为构建变更数组非常乏味。在回溯算法中,您将构建候选项,应用更改,并检查生成的组合是否有效,如果有效,则进行打印。我建议您阅读 Steven Skiena 的算法设计手册第 7 章,了解有关回溯以及如何解决组合问题的一些背景信息。

关于java - 计算一组数字的所有 1-off 组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56196388/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com