gpt4 book ai didi

java - 重构排列发现

转载 作者:行者123 更新时间:2023-12-01 12:27:08 25 4
gpt4 key购买 nike

我尝试重构这段代码几个小时。

for (int i = 1; i <= 10; i++) {
for (int ii = 2; ii <= 10; ii++) {
if (ii > i) {
for (int iii = 3; iii <= 10; iii++) {
if (iii > ii && iii > i) {
for (int iiii = 4; iiii <= 10; iiii++) {
if (iiii > i && iiii > ii && iiii > iii) {
for (int iiiii = 5; iiiii <= 10; iiiii++) {
if (iiiii > i && iiiii > ii && iiiii > iii && iiiii > iiii) {
FileUtils.writeStringToFile(file, i + " " + ii + " " + iii + " " + iiii + " " + iiiii + "\n", true);
}
}
}
}
}
}
}
}
}

目标是获得两个输入整数(循环数(此代码中为 5)和数字的最大值(本例中为 10),但我不知道如何实现这一点。抱歉我的英语不太好。这对我的作业会有很大帮助。

最佳答案

要获得可变数量的循环,您需要使用递归。像这样的东西。

public static void combine(int values, int maximum, Consumer<int[]> consumer) {
combine0(0, values, 1, maximum-values+1, new int[values], consumer);
}

static void consumer0(int index, int values, int min, int max, List<Integer> ints, Consumer<List<integer>> consumer) {
if (index == values) {
consumer.apply(ints);
return;
}
for(int i = min; i <= max ; i ++) {
ints[index] = i;
comsumer0(index+1, values, min+1, max+1, ints, consumer);
}
}
<小时/>

有很多方法可以改进它,您可以只使用一个循环,但您必须使用一些数学知识;)

我会开始。

for (int i = 1; i <= 10; i++) {
for (int ii = 2; ii <= 10; ii++) {
if (ii > i) {

与相同

for (int i = 1; i < 10; i++) {
for (int ii = i+1; ii <= 10; ii++) {

当您添加更多循环时,您可以看到 i 不可能是 10 或 9 等,就像您可以看到 ii 必须处于至少 2 个。

关于java - 重构排列发现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26244285/

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