C ++程序由于某种未知原因而崩溃

时间:2016-04-27 15:59:25

标签: c++

我最近开始学习C ++,并且认为我会用Project Euler问题测试我的勇气。我解决了前两个,但我坚持第三个。它正确编译没有任何错误,但它一旦执行就会崩溃。我尝试删除嵌套的for循环以隔离问题,但它仍然崩溃。

public class CloseTo1000 { 
static Set<List<Integer>> powerSet = new HashSet<>();

public static void main(String[] args) {        

    List<Integer> mainList = new ArrayList<Integer>();
    mainList.add(900);
    mainList.add(500);
    mainList.add(498);
    mainList.add(4);
    powerSet = buildPowerSet(mainList,mainList.size());
    System.out.println(powerSet);

    Set<List<Integer>> toremove = new HashSet<List<Integer>>(); //remove the empty set
    for(List<Integer> li : powerSet){
        if(li.isEmpty()){
        toremove.add(li);
        }
    }
    powerSet.removeAll(toremove);

    findOptimum(powerSet);        
}

private static Set<List<Integer>> buildPowerSet(List<Integer> list, int count){

    powerSet.add(list);

    for(int i=0; i<list.size(); i++)
    {
        List<Integer> temp = new ArrayList<Integer>(list);
        temp.remove(i);
        buildPowerSet(temp, temp.size());
    }
    return powerSet;
}


private static int findOptimum(Set<List<Integer>> powerSet){
    int opt = 10000 ;
    List<Integer> optList = new ArrayList<Integer>();

    for (List<Integer> li : powerSet){
        int k = Math.abs(li.stream().mapToInt(Integer :: intValue).sum()-1000);// find absolute difference to 1000
        System.out.println(k);   
        if(k<opt){
        opt=k;
        optList=li;
        }
        if(k==opt && li.stream().mapToInt(Integer :: intValue).sum()>1000){// 999 and 1001, it should take the highest number
        opt=k;
        optList=li;
        }
    } 
    opt = opt +1000;
     System.out.println("optList: "+optList);
     System.out.println("opt: " +opt);
    return opt;     
}
}

1 个答案:

答案 0 :(得分:2)

如果if((i%j)==0)i为零,则在j中,您的下一行是划分i和j。这是除零。