我正在尝试组合,但我不知道该怎么做

时间:2020-08-20 15:18:02

标签: java sorting

在一个测试用例中,我想输入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

2 个答案:

答案 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}