找某集合中任意元素之和最接近于一指定值的所有的元素的算法
如:集合{90, 200, 300, 400, 530}  指定数值:650
  那么元素之和最接近650的元素是90和530, 因为90 + 530 = 620 最接近650  
最好用java实现,谢谢。

解决方案 »

  1.   

    //file:test.java
    public class test {
        public static void main(String[] args) {
            int result = 0;
            int r = Integer.MAX_VALUE;
            int[] a = {90, 200, 300, 400, 530};
            int l=0,m=0;
            if(a.length<2){return;}
            for(int i = 0; i<a.length; i++){
                for(int j = i+1; j<a.length; j++){
                    int tmp = a[i]+a[j];
                    int r1 = 650-tmp;
                    if(r1<0){r1 = 0-r1;}
                    else if(r1==0){
                        l=i;m=j;
                        result = tmp;
                        break;
                    }
                    if(r>r1){
                        l=i;m=j;
                        r = 650-tmp;
                        result = tmp;
                    }
                }
            }
            System.out.println(""+l+" "+m+" "+result);
        }
      

  2.   

    有点错误~-~
    //file:test.java
    public class test {
    public static void main(String[] args) {
            int result = 0;
            int r = Integer.MAX_VALUE;
            int[] a = {90, 200, 300, 400, 530};
            int l=0,m=0;
            if(a.length<2){return;}
    l:        for(int i = 0; i<a.length; i++){
                for(int j = i+1; j<a.length; j++){
                    int tmp = a[i]+a[j];
                    int r1 = 650-tmp;
                    if(r1<0){r1 = 0-r1;}
                    else if(r1==0){
                        l=i;m=j;
                        result = tmp;
                        break l;
                    }
                    if(r>r1){
                        l=i;m=j;
                        r = 650-tmp;
                        result = tmp;
                    }
                }
            }
            System.out.println(""+l+" "+m+" "+result);
        }
    }