题目是这样子的,
在120,95,85,75,65,50取3个或者3个以上的数(数字可重复),让他们的和为325,请问有多少组这样的数,每组是什么?如95 95 85 50我自己写的垃圾代码import java.util.Arrays;
import java.util.TreeSet;public class ZuShu {
public static void main(String[] args){
int[] arr={50,65,75,85,95,120};
TreeSet<String> hs=new TreeSet<String>();
for(int i=0;i<arr.length;i++){
for(int j=0;j<arr.length;j++){
for(int k=0;k<arr.length;k++){
if(arr[i]+arr[j]+arr[k]==325){
int a[]=new int[]{arr[i],arr[j],arr[k]};
Arrays.sort(a);
String s=a[0]+"+"+a[1]+"+"+a[2];
hs.add(s);
}else{
for(int x=0;x<arr.length;x++){
if(arr[i]+arr[j]+arr[k]+arr[x]==325){
int a[]=new int[]{arr[i],arr[j],arr[k],arr[x]};
Arrays.sort(a);
String s=a[0]+"+"+a[1]+"+"+a[2]+"+"+a[3];
hs.add(s);
}
else{
for(int y=0;y<arr.length;y++){
if(arr[i]+arr[j]+arr[k]+arr[x]+arr[y]==325){
int a[]=new int[]{arr[i],arr[j],arr[k],arr[x],arr[y]};
Arrays.sort(a);
String s=a[0]+"+"+a[1]+"+"+a[2]+"+"+a[3]+"+"+a[4];
hs.add(s);
}else{
for(int z=0;z<arr.length;z++){
if(arr[i]+arr[j]+arr[k]+arr[x]+arr[y]+arr[z]==325){
int a[]=new int[]{arr[i],arr[j],arr[k],arr[x],arr[y],arr[z]};
Arrays.sort(a);
String s=a[0]+"+"+a[1]+"+"+a[2]+"+"+a[3]+"+"+a[4]+"+"+a[5];
hs.add(s);
}
}
}
}
}
}
}

}
}
}
for(String s:hs){
System.out.println(s+"="+325);
}
System.out.println("一共有"+hs.size()+"组数。");
}}
上次火龙果给我的菱形非常棒,还能帮忙下吗?

解决方案 »

  1.   


    import java.util.LinkedList;
    import java.util.List;
    public class Test { public static void main(String[] args) {
    int[] nums = { 120, 95, 85, 75, 65, 50 };
    List<Integer> list = new LinkedList<Integer>();
    method(nums, 325, list);
    }

    private static void method(int[] nums, int sum, List<Integer> list){
    if(sum == 0){
    for(int i : list){
    System.out.printf("%d ", i);
    }
    System.out.println();
    }else if(sum > 0){
    for (int i = 0; i < nums.length; i++) {
    list.add(nums[i]);
    method(nums, sum - nums[i], list);
    list.remove(list.size() - 1);
    }
    }
    }

    }