C++ 具有求和界的重复置换

C++ 具有求和界的重复置换,c++,c,algorithm,permutation,C++,C,Algorithm,Permutation,我试图通过在值的总和上加上一个界来生成一个数字数组的所有重复排列 榜样; 我有我的数组{3,4,5,6},我的界是11 我想生成所有到达和刚刚穿过11的重复排列,如下所示: 3 3 3 3 // 3 4 3 3 // 3 3 5 3 // 3 3 3 6 // 3 4 4 3 // 4 4 4 // 6 6 // 6 4 3 // 5 5 5 // .. 所以基数不需要与数组的基数相同。 提前谢谢你的帮助 我尝试了java代码的下面的转换,我知道了,但是C++仍然给出了错误“未处理的异常”:

我试图通过在值的总和上加上一个界来生成一个数字数组的所有重复排列

榜样; 我有我的数组{3,4,5,6},我的界是11

我想生成所有到达和刚刚穿过11的重复排列,如下所示:

3 3 3 3 //
3 4 3 3 //
3 3 5 3 //
3 3 3 6 //
3 4 4 3 //
4 4 4 //
6 6 //
6 4 3 //
5 5 5 //
..
所以基数不需要与数组的基数相同。 提前谢谢你的帮助

我尝试了java代码的下面的转换,我知道了,但是C++仍然给出了错误“未处理的异常”:


这并不复杂。因为你对自己的语言要求如此含糊不清,我自由地发明了自己的伪代码:

function generate(int[] array, int bound, int[] solution, int sum)
    if (sum > bound)
        print solution
    else
        for each elt in array
            generate(array, bound, solution ++ [elt], sum + elt)
并称之为

generate([3, 4, 5, 6], 11, [], 0)
这是Java的代码:

private static boolean checkConstraint(int[] array) {
    int sum=0;
    for (int i=0; i<array.length; i++) {
        sum+= array[i];
    }
            //we found it, print
    if (sum >= 11) {
        System.out.println(Arrays.toString(array));
        return true;
    }
    return false;
}

public static void permute(int[] array, int[] start){
    if (checkConstraint(start)) {
        return;
    }

    for (int i= 0; i < array.length; i++) {
        int[] newStart= Arrays.copyOf(start, start.length + 1);
        newStart[start.length] = array[i];
        permute(array, newStart);
    }
}

public static void main(String[] args) {
    int[] array= {3,4,5,6};
    for (int i=0; i<array.length; i++) {
        permute(array, new int[] {array[i]});
    }
}
private静态布尔checkConstraint(int[]数组){
整数和=0;
对于(int i=0;i=11){
System.out.println(array.toString(array));
返回true;
}
返回false;
}
公共静态无效置换(int[]数组,int[]开始){
如果(检查约束(开始)){
返回;
}
for(int i=0;i对于加上大量的不必要的标签不会帮助你找到答案,你会得到票数。总数是十一比多少?这是我的第一篇文章,SRY是如此广泛。你说得对。实际上,我将把这个解决方案嵌入到OPL CPLEX中,我将使用C++。所以,我应该使用C++。将java代码转换为C++。@ DoToRoad终止是“每当你添加一个新的,停止它达到或大于11”“到达和刚刚跨越11”。你如何定义它?为什么<代码> 3 3 3 6=15 < /代码>接受的排列的一部分?什么是“解决方案+[ELT]”的意思?@(见附件)
function generate(int[] array, int bound, int[] solution, int sum)
    if (sum > bound)
        print solution
    else
        for each elt in array
            generate(array, bound, solution ++ [elt], sum + elt)
generate([3, 4, 5, 6], 11, [], 0)
private static boolean checkConstraint(int[] array) {
    int sum=0;
    for (int i=0; i<array.length; i++) {
        sum+= array[i];
    }
            //we found it, print
    if (sum >= 11) {
        System.out.println(Arrays.toString(array));
        return true;
    }
    return false;
}

public static void permute(int[] array, int[] start){
    if (checkConstraint(start)) {
        return;
    }

    for (int i= 0; i < array.length; i++) {
        int[] newStart= Arrays.copyOf(start, start.length + 1);
        newStart[start.length] = array[i];
        permute(array, newStart);
    }
}

public static void main(String[] args) {
    int[] array= {3,4,5,6};
    for (int i=0; i<array.length; i++) {
        permute(array, new int[] {array[i]});
    }
}