第1个回答 2013-05-22
用递归:import java.util.Vector;public class Que1 {
Vector<Vector<Integer>> all=new Vector<Vector<Integer>>();
int[] array = new int[] { 460, 588, 720, 1250, 1800, 2200, 3080, 4100,
4375, 5184, 6510, 6900, 9000 };
public Que1(){
for(int i=0;i<array.length;i++){
Vector<Integer> v=new Vector<Integer>();
pro(v,i);
}
for(int i=0;i<all.size();i++){
System.out.println(all.get(i).toString());
}
}
private boolean pro(Vector<Integer> v,int index){
v.add(array[index]);
int sum=sum(v);
if(sum<=13750){
if(sum==13750){
all.add((Vector<Integer>)v.clone());
v.remove(v.size()-1);
return true;
}
for(int i=index+1;i<array.length;i++){
if(!pro(v,i)){
break;
}
}
v.remove(v.size()-1);
return true;
}else{
v.remove(v.size()-1);
return false;
}
}
private int sum(Vector<Integer> v){
int sum=0;
for(int i=0;i<v.size();i++){
sum+=v.get(i);
}
return sum;
}
public static void main(String arg[]){
new Que1();
}
}本回答被网友采纳
第2个回答 2020-05-14
算法分析:得到结果为13750,每个数都比它小,而且三个最小的数相加大于它,因此,测试的开始应该是两个数的相//加,终点是三个数的相加;
具体算法是,依次从数组中取出最接近13750的数,然后作减法,再从数组中取出一个不重复的最接近于差数的数,以次递归的到最后结果
大概思路给你放这了,自己动手做比什么都强!