package 数组3个数为0;public class Test {
public static void main(String[] args) {
int [] a={-5,2,1,14,6,-3};
int x=-1;
for(int i=0;i<a.length;i++){
int q=a[i];
x=i;
x++;
System.out.println("q="+q);
for(int j=x;j<a.length;j++){
System.out.println("第二层"+a[j]);
int w=q+a[j];
System.out.println("w="+w);
x++;
for(int k=x;k<a.length;k++){
System.out.println("第三层"+a[k]);
int e=w+a[k];
System.out.println("e="+e);
if(e==0){
System.out.println("成功"+e);
System.exit(0);
}
}
}
}
}


}
自己写的太复杂了。。 

解决方案 »

  1.   

    随便写了个,看看有哪不对?
    public class TestMain {
    public static void main(String[] args) {
    int[] arr = { -5, 2, 1, 14, 6, -3 };
    int sum= 0; //要求的和
    calculate(sum,arr);
    } public static void calculate(int sum,int[] arr) {
    int count = 0;
    for (int i = 0; i <arr.length; i++) {
    for (int j = i+1; j <arr.length; j++) {
    for (int k = j+1; k <arr.length; k++) {
    if (arr[i] + arr[j] + arr[k] == sum) {
    count++;
    System.out.println("第"+count+"组:"+arr[i]+"+"+arr[j]+"+"+arr[k]+"="+sum);
    }
    }
    }
    }
    }
    }
      

  2.   

    /***
     * the times target occur in <code>int[] ints</code>
     * 
     * @param ints
     * @param target
     * @return
     */
    public static int count(int[] ints, int target) {
    int count = 0;
    for (int i = 0; i < ints.length; i++) {
    if (ints[i] == target) {
    count++;
    }
    }
    return count;
    }
      

  3.   

    不见得简单的方法,不过如果你把题目改成30个数相加是否有0,也只需要把MAX_LEVEL改成30就行了。至于效率嘛private static int MAX_LEVEL = 3;
    public void main (String [] args) {
      int[] arr = {2,4,5,0,-4,-2};
      check (arr, -1, 1, 0);
    }void check (int[] arr, int index, int level, int sum) {
      if (level > MAX_LEVEL) return;  for (int i = index + 1; i < arr.length; i++) {
        if (level == MAX_LEVEL) {
          if (sum + arr[i] == 0) {
            System.out.println("oh yeah!");
            exit(0);
          }
        }
        else {
          check (arr, i, level + 1, sum + arr[i]);
        }
      }
    }
      

  4.   

    漏了两个static,不好意思。代码没测过,不过应该没问题。。
      

  5.   

    我觉得可以先将数组排序。 Arrays.sort(a); ->{-5,-3,1,2,6,14}
    然后还是依次遍历,不过当找到等于0的后,就可以跳过剩余的数,继续下一个循环了。
    比如当-3+1+2=0后,就不用再计算-3+1+6了 因为后面的肯定都会比0大。
    就可以进行下一个循环-3+2+6>0,又可以跳过后面剩余的数了。
      

  6.   


    // 借用了2L的代码,按上面的思路小小的修改了下
    // main里面加个Arrays.sort(a); 然后忽略了排序后有重复数据的情况。
       public static void calculate(int sum,int[] arr) {
            int count = 0;
            for (int i = 0; i <arr.length; i++) {
                        if(arr[i]>=0) break;
                for (int j = i+1; j <arr.length; j++) {
                 if(arr[i]+arr[j]>=0){
                 break;
                 }
                    for (int k = j+1; k <arr.length; k++) {
                        if (arr[i] + arr[j] + arr[k] == sum) {
                            count++;
                            System.out.println("第"+count+"组:"+arr[i]+"+"+arr[j]+"+"+arr[k]+"="+sum);
                            break;
                        }
                    }
                }
            }
        }
      

  7.   

    应该需要排序,而且这个应该有很多优化的空间。
    不过可能会很复杂。我想到了那个可怕的kmp算法。