java吧 关注:1,293,007贴子:12,826,737
  • 10回复贴,共1

给吧里的人出道题吧,

只看楼主收藏回复

0--9九个数,组合成为三个数A B C.其中  是四位数 B C为 为三位数

要求    A=B+c

输出所有符合这个条件的组合  A=?  B=?   C=?
       


1楼2008-01-16 17:35回复
    public class computer {
     public static void main(String[] args) {
     int x,y,z,i,j,flag;
     for(x=201;x<1000;x++)
     for(y=201;y<1000;y++){ 
     z=x+y;
     flag=1;
     
     if(z/1000==1){
     int a[]=new int[]{x%10,x%100/10,x/100,y%10,y%100/10,y/100,z%10,z%100/10,z%1000/100,1};
     outer:
     for(i=0;i<9;i++)
     for(j=i+1;j<10;j++)
     if(a[i]==a[j]){flag=0;break outer;} 
     if(flag==1) System.out.println("x="+x+" y="+y+" z="+z); 
     }
     }
     }
    }

    逆向思维,先相加 后判断是否是组合


    2楼2008-01-16 19:06
    回复
      2025-12-30 05:22:25
      广告
      不感兴趣
      开通SVIP免广告
      package baidu.service;

      /**
       * Author:Neo
       */
      public interface MultiFiguresNumberService {
      /** 0--9九个数,组合成为三个数A B C.其中 A是四位数 B C为 为三位数 

      要求 A=B+c 

      输出所有符合这个条件的组合 A=? B=? C=? 
       */
      public int getEqualsCount();
      }


      3楼2008-01-16 22:08
      回复
        package baidu.service;

        /**
         * Author:neo
         */
        public class MultiFiguresNumberServiceFactory {
        public static final int SERVICE_TYPE_COMPUTER = 1;
        public static final int SERVICE_TYPE_MATH = 2;

        public static final MultiFiguresNumberService getService(int serviceType) {
        if (SERVICE_TYPE_COMPUTER == serviceType)
        return new NumberServiceComputerImpl();
        if (SERVICE_TYPE_MATH == serviceType)
        return new NumberServiceMathImpl();
        return null;
        }

        }


        4楼2008-01-16 22:08
        回复
          package baidu.service;

          import java.util.ArrayList;
          import java.util.List;

          /**
           * Author:Neo
           */
          class NumberBuilder {
          private final int maxNum = 9;
          private List nums;
          private int figure;

          public List buildAllNum(int figure) {
          this.figure = figure;
          this.nums = new ArrayList();
          buildNums(figure, 0);
          return this.nums;
          }

          private void buildNums(int figure, int startNumber) {
          int i = 0;
          if (figure == this.figure)
          i = 1;
          figure--;
          if (figure < 0)
          return;
          for (; i <= this.maxNum; i++) {
          int out = (int) (startNumber + i * Math.pow(10, figure));
          if (figure == 0)
          nums.add(new Integer(out));
          else if (figure > 0)
          buildNums(figure, out);
          }
          }
          }


          5楼2008-01-16 22:09
          回复
            package baidu.service;

            import java.io.FileNotFoundException;
            import java.io.FileOutputStream;
            import java.io.PrintStream;
            import java.util.Iterator;
            import java.util.List;

            /**
             * Author:neo
             **/
            class NumberServiceComputerImpl implements MultiFiguresNumberService{



            public int getEqualsCount(){
            try {
            System.setOut(new PrintStream(new FileOutputStream("c:/testEqComputer.txt")));
            } catch (FileNotFoundException e) {
            e.printStackTrace();
            }
            NumberBuilder builder=new NumberBuilder();
            List numList4=builder.buildAllNum(4);
            System.out.println("total 4 figures number:"+numList4.size());
            List numList3=builder.buildAllNum(3);
            System.out.println("total 3 figures number:"+numList3.size());
            int total=0;
            for (Iterator iterator = numList4.iterator(); iterator.hasNext();) {
            Integer i = (Integer) iterator.next();
            if(i.intValue()>1998)break; //improve performance 
            for (Iterator iterator1 = numList3.iterator(); iterator1.hasNext();) {
            Integer i1=(Integer) iterator1.next();
            if(i1.intValue()<500) continue; //improve performance
            for (Iterator iterator2 = numList3.iterator(); iterator2.hasNext();) {
            Integer i2=(Integer) iterator2.next();
            if(i2.intValue()<500) continue; //improve performance
            if(i.intValue()==(i1.intValue()+i2.intValue())){
            System.out.println("4 figure number:"+i.intValue()+",3 figure number1:"+i1+",3 figure number2:"+i2);
            total++;
            }
            }
            }
            }
            return total;
            }

            }


            6楼2008-01-16 22:09
            回复
              package baidu.service;

              import java.io.FileNotFoundException;
              import java.io.FileOutputStream;
              import java.io.PrintStream;

              /**
               * Author:neo
               **/
              class NumberServiceMathImpl implements MultiFiguresNumberService{

              public int getEqualsCount() {
              try {
              System.setOut(new PrintStream(new FileOutputStream("c:/testEqMath.txt")));
              } catch (FileNotFoundException e) {
              e.printStackTrace();
              }
              int total=0;
              for(int startNum=500;startNum<=999;startNum++){
              for(int endNum=500;endNum<=999;endNum++){
              System.out.println("4 figure number:"+(startNum+endNum)+",3 figure number1:"+startNum+",3 figure number2:"+endNum);
              total++;
              }
              }
              return total;
              }

              }


              7楼2008-01-16 22:09
              回复
                package baidu.test;

                import baidu.service.MultiFiguresNumberService;
                import baidu.service.MultiFiguresNumberServiceFactory;

                /**
                 * Author:neo
                 **/
                public class TestNumberService {


                public static void main(String[] args) {
                MultiFiguresNumberService mathService=MultiFiguresNumberServiceFactory.getService(MultiFiguresNumberServiceFactory.SERVICE_TYPE_MATH);
                int tol1=mathService.getEqualsCount();
                System.out.println("tol1:"+tol1);
                MultiFiguresNumberService computerService=MultiFiguresNumberServiceFactory.getService(MultiFiguresNumberServiceFactory.SERVICE_TYPE_COMPUTER);
                int tol2=computerService.getEqualsCount();
                System.out.println("tol2:"+tol2);
                }

                }


                8楼2008-01-16 22:09
                回复
                  2025-12-30 05:16:25
                  广告
                  不感兴趣
                  开通SVIP免广告
                  没时间做重构,大概意思一种是纯粹按照计算机思路来算,一种是数学思路来算。不过结果应该都是一样多


                  9楼2008-01-16 22:12
                  回复
                    这个程序有关小bug!大家发现没


                    10楼2008-01-16 22:15
                    回复
                      好长 留印明天看 neo很强 :)


                      11楼2008-01-17 01:15
                      回复