在一个测试用例中,我想输入1 2 3 4
{1 + 2,3 + 4}
{1 + 3,2 + 4}
{1 + 4,2 + 3}
但是我只能做{1 + 2,3 + 4},我想不出任何方法来获得{1 + 3,2 + 4}。 我需要一些算法建议,无法考虑任何条件。
{icon}
这是我的代码,现在打印{3,7},但我也想要{4,6}和{5,5}
如果有帮助,我正在尝试解决CCC 2017 Senior S3问题
https://www.cemc.uwaterloo.ca/contests/computing/2017/stage%201/seniorEF.pdf
答案 0 :(得分:3)
创建数组所有组合的一种算法利用了无符号二进制计数器。
Array: 1 2 3 4
0 0 0 0 [] empty combination
0 0 0 1 [4]
0 0 1 0 [3]
0 0 1 1 [3, 4]
以此类推。
在您的情况下,您需要2位数字加2位数字的组合。我们可以通过测试二进制计数器并在二进制计数器恰好有2位打开时创建组合来实现此目的。
Array: 1 2 3 4
0 0 1 1 [3, 4] & [1, 2]
0 1 0 1 [2, 4] & [1, 3]
0 1 1 0 [2, 3] & [1, 4]
1 0 0 1 [1, 4] & [2, 3]
1 0 1 0 [1, 3] & [2, 4]
1 1 0 0 [1, 2] & [3, 4]
在您的示例中,对的顺序并不重要。您可以消除重复的对,并具有要查找的三个条件。
答案 1 :(得分:-1)
使用此代码获得预期的解决方案
public static void main(String[] args) {
List<Integer> num;
Integer[] numArray = {1,2,3,4};
num = Arrays.asList (numArray);
List<Integer> newList = new ArrayList<> ();
for(int i=1;i<num.size ();i++) {
int[] intArray = new int[2];
newList.addAll (num);
newList.remove (0);
newList.remove (i-1);
intArray[0]=num.get (0)+num.get (i);
intArray[1] = newList.get (0)+newList.get (1);
System.out.println ("{"+intArray[0]+","+intArray[1]+"}");
}
}
结果将如下所示:
{3,7}
{4,6}
{5,5}