前三位做出来的有分,分数依次是20,10,5。
限时60分钟。
----
要求完成下面的表达式:
   *****
+ 20085
-------------
    *****
要求星号分别表示从0到9的一位数字,而且不允许重复,并使上面的加法成立
----
答案如下:
Number :1   14982 + 20085----------   35067
Number :2   27951 + 20085----------   48036
Number :3   37941 + 20085----------   58026
Number :4   41973 + 20085----------   62058
Number :5   51963 + 20085----------   72048
Number :6   64932 + 20085----------   85017It cost:343

解决方案 »

  1.   

    public class Test
    {    public static void main(String[] args)
        {
            long t=new Date().getTime();
            for(int i=10234;i<=98765;i++)
            {
                for(int j=10234;j<98765;j++)
                {
                    if(i==(j+20085))
                    {
                       
                        String temp=i+""+j;
                       
                        boolean flag=true;
                        for(int k=0;k<temp.length();k++)
                        {
                            String s=""+temp.charAt(k);
                            if(temp.substring(k+1).indexOf(s)!=-1)
                                flag=false;
                            
                        }
                        if(flag==true)
                            System.out.println(j+":"+i);
                            
                    }
                   
                }
            }
            System.out.println((new Date().getTime()-t)/1000);
        }
    }
    耗时29秒
      

  2.   

    public static void main(String[] args){
            
            for (int i = 10234; i<=(99999-20085); i++){
                boolean f = true;
                int j=i+20085;
                String s = i+""+j;
                byte [] b = s.getBytes();
                Arrays.sort(b);
                for (int i1=0;i1<b.length-1;i1++){
                    if (b[i1] == b[i1+1]) {f=false;break;}
                }
                if (f) System.out.println(i+ " " +j);
            }
        }
    Result:14982 35067
    27951 48036
    37941 58026
    41973 62058
    51963 72048
    64932 85017
    BUILD SUCCESSFUL (total time: 1 second)
      

  3.   

    修正,增加耗时计算    public static void main(String[] args){
            long d1 = new Date().getTime();
            for (int i = 10234; i<=(98765-20085); i++){
                boolean f = true;
                int j=i+20085;
                String s = i+""+j;
                byte [] b = s.getBytes();
                Arrays.sort(b);
                for (int i1=0;i1<b.length-1;i1++){
                    if (b[i1] == b[i1+1]) {f=false;break;}
                }
                if (f) System.out.println(i+ " " +j);
            }
            System.out.println("It cost " + (new Date().getTime()-d1) + " milliseconds");
        }
    14982 35067
    27951 48036
    37941 58026
    41973 62058
    51963 72048
    64932 85017
    It cost 234 milliseconds
      

  4.   

    public class Test
    {    public static void main(String[] args)
        {
            long t=new Date().getTime();
            for(int i=20085;i<=98765-20085;i++)
            {
                for(int j=10234;j<98765-20085;j++)
                {
                    if((i-j)==20085)
                    {
                       
                        String temp=i+""+j;
                       
                        boolean flag=true;
                        for(int k=0;k<temp.length();k++)
                        {
                            String s=""+temp.charAt(k);
                            if(temp.substring(k+1).indexOf(s)!=-1)
                                flag=false;
                            
                        }
                        if(flag==true)
                            System.out.println(j+":"+i);
                            
                    }
                   
                }
            }
            System.out.println((new Date().getTime()-t)/1000);
        }
    }
    耗时也是11s
      

  5.   

    我觉得你们的头脑好简单,哎,不服气啊。
    看看我的吧,给个评价。
    ------------------------------------
    package november.rain;
    import java.util.*;/***
     * 要求完成下面的表达式:
         ?????
       + 20085
         -------------
         ?????
        要求星号分别表示从0到9的一位数字,而且不允许重复,并使上面的加法成立
     */public class Addend {
        static int COMPARED = 20085;
        public static void main(String[] args) {
            long s = System.currentTimeMillis();
            Addend add = new Addend();
            add.doExecute(getNumbers(), String.valueOf(COMPARED));
            long e = System.currentTimeMillis();
            System.out.println("It cost:" + (e - s));
        }    /**
         * 判断本身是否含有相同字符。
         * 完全不同,返回true。否则返回false;
         */
        public boolean isDiff(String str) {
            boolean diff = true;
            int len = str.length();
            for (int i = 0; i < len - 1; i++) {
                for (int j = i + 1; j < len; j++) {
                    if (str.charAt(i) == str.charAt(j)) {
                        diff = false;
                        break;
                    }
                }
            }
            return diff;
        }    /**
         * 判断两个字符串是否含有与对方相同的字符。
         * 完全不同,返回true。否则返回false;
         */
        public boolean isDiff(int add, int res) {
            boolean diff = true;
            String addend = String.valueOf(add);
            String result = String.valueOf(res);
            int lenAddend = addend.length();
            int lenResult = result.length();
            if (!isDiff(addend) || !isDiff(result)) {
                return false;
            }
            if (lenAddend != lenResult) {
                diff = false;
            } else {
                for (int i = 0; i < lenAddend; i++) {
                    if (result.indexOf(addend.charAt(i)) >= 0) {
                        diff = false;
                        break;
                    }
                }
            }
            return diff;
        }    /**
         * 根据给定的字符串找出并打印符合规则的数字。
         */
        public void doExecute(ArrayList list, String compare) {
            try {
                int count = 0;
                int add = Integer.parseInt(compare);
                int added ,result;
                for (int i = 0; i < list.size(); i++) {
                    added = Integer.parseInt((String) list.get(i));
                    result = added + add;
                    boolean right = isDiff(added, result);
                    if (right) {
                        count++;
                        System.out.println("\nNumber :"+count);
                        System.out.println("   "+added);
                        System.out.println(" + "+add);
                        System.out.println("----------");
                        System.out.println("   "+result);
                    }
                }
            } catch (NumberFormatException ex) {
                ex.printStackTrace();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }    /**
         * 构造5位数并存储,其中数字可从0到9获取,但不能相同。
         */
        public static ArrayList getNumbers() {
            ArrayList list = new ArrayList();
            int p5, p4, p3, p2, p1;
            for (int i5 = 0; i5 < 10; i5++) {
                p5 = i5;
                for (int i4 = 0; i4 < 10; i4++) {
                    boolean b54 = (i5 == i4);
                    if (b54) {
                        continue;
                    } else {
                        p4 = i4;
                        for (int i3 = 0; i3 < 10; i3++) {
                            boolean b53 = (i5 == i3);
                            boolean b43 = (i4 == i3);
                            if (b53 || b43) {
                                continue;
                            } else {
                                p3 = i3;
                                for (int i2 = 0; i2 < 10; i2++) {
                                    boolean b52 = (i5 == i2);
                                    boolean b42 = (i4 == i2);
                                    boolean b32 = (i3 == i2);
                                    if (b52 || b42 || b32) {
                                        continue;
                                    } else {
                                        p2 = i2;
                                        for (int i1 = 0; i1 < 10; i1++) {
                                            boolean b51 = (i5 == i1);
                                            boolean b41 = (i4 == i1);
                                            boolean b31 = (i3 == i1);
                                            boolean b21 = (i2 == i1);
                                            if (b51 || b41 || b31 || b21) {
                                                continue;
                                            } else {
                                                p1 = i1;
                                                String number = p5 + "" + p4 + "" +
                                                        p3 + "" + p2 + "" + p1;
                                                list.add(number);
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
            return list;
        }
    }
      

  6.   

    To: classjava(原始野人)你的第二个算法,在我的计算机上一下,用时10.344秒。