gpt4 book ai didi

java - 检查 Java 数组中的总和

转载 作者:行者123 更新时间:2023-12-02 09:21:35 27 4
gpt4 key购买 nike

我正在用 Java 做一个名为“三十”的骰子游戏。我有一个数组,其中包含骰子的值,例如 [1, 3, 4, 5, 5, 6]。我希望能够从该数组中找到给出给定总和的每个组,但每个骰子只能计算一次。

例如,如果我有数组 [1, 3, 4, 5, 5, 6] 并且想要找到每个等于 12 的组,那么就会得到 1+5+6=12 和 3+4 +5=12。

以 [1, 1, 1, 1, 2, 6] 为例,我将得到 1+1+1+1+2+6=12。

总会有 6 个骰子,但我要寻找的总和可以是 4 到 12 之间的任意值。

有人可以帮我吗?我实际上没有任何代码可以提供,这只会令人困惑并且根本没有帮助。

最佳答案

这是一个没有经过充分测试且可能有点幼稚的解决方案。我使用整数列表,因为我不喜欢数组,抱歉!

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import org.junit.Before;
import org.junit.Test;

public class PickNumbersTest {

private List<Integer> numbers;

@Before
public void before() {
Integer[] ints = new Integer[] { 1, 3, 4, 5, 5, 6 };
numbers = new ArrayList<>();
numbers.addAll(Arrays.asList(ints));
}

@Test
public void test() {

PickNumbers p = new PickNumbers();
List<List<Integer>> result = p.pick(12, numbers);

System.out.println(result);
}
}

import java.util.ArrayList;
import java.util.List;

public class PickNumbers {

public List<List<Integer>> pick(final int sum, final List<Integer> values) {

// make a copy to avoid making changes to passed in List
List<Integer> numbers = copy(values);

List<List<Integer>> results = new ArrayList<List<Integer>>();

while (!pickSingle(sum, numbers).isEmpty()) {

List<Integer> currentResult = pickSingle(sum, numbers);

results.add(currentResult);
currentResult.forEach(i -> numbers.remove(i));

}

return results;
}

protected List<Integer> pickSingle(final int sum, final List<Integer> values) {
int rest = sum;
List<Integer> result = new ArrayList<>();
Picker p = new Picker(values);

while (rest > 0 && p.hasNext()) {

int i = p.next();

if (i > rest) {
p.remove();
} else if (i == rest) {
result.add(i);
return result;
} else { // i < rest
result.add(i);
p.remove();
rest = rest - i;
}
}

return new ArrayList<>();
}

private List<Integer> copy(final List<Integer> values) {

List<Integer> copy = new ArrayList<Integer>();
copy.addAll(values);

return copy;
}
}

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class Picker {

private List<Integer> values = new ArrayList<Integer>();

public Picker(final List<Integer> values) {

this.values.addAll(values);
this.values.sort(null);
Collections.reverse(this.values);
}

public int next() {

return values.get(0);
}

public void remove() {

values.remove(0);
}

public boolean hasNext() {

return values.size() > 0;
}
}

关于java - 检查 Java 数组中的总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38202410/

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