将5,6,7,8,9添加下面的空格里,使他们的积有最大值。
  
  __  __ __  × __ __
使用穷举法,把5个数字循环判断放入数组,最大的值就是要找的值。

解决方案 »

  1.   

    就是个全排列的算法,定义一个数组int number[]={5,6,7,8,9};
    进行全排列
    取前三个number[0],number[1],number[2]作为第一个数的百位十位个位
    后两个作为另一个数字
      

  2.   


      package shili;
      import java.util.LinkedList;
      import java.util.List;  /** *//**
       * 将5,6,7,8,9添入到下面的算式中,使得他们的积有最大值
       * _ _ _ * _ _ (即三位数乘以两位数的形式),要求求出最大乘积的结果和算式。
       * @author sitinspring([email protected]
       * @since 2008-6-11 上午10:17:57
       * @vsersion 1.00 创建 sitinspring 2008-6-11 上午10:17:57
       */
      public class MaxMultiResult{
          /** *//**
           * 存储全排列后数组的链表
           */
          private List<Integer[]> ls;
          
          /** *//**
           * 构造函数
           * @param arr
           */
          public MaxMultiResult(Integer[] arr){
              ls=new LinkedList<Integer[]>();
              
              // 进行全排列,将排列后的结果放入链表
              permutation(arr,0,arr.length);
              
              // 遍历查找乘积的最大值
              int multiResult=0;
              int op1=0;
              int op2=0;
              for(Integer[] arrTmp:ls){
                  int op1Tmp=arrTmp[0]*100+arrTmp[1]*10+arrTmp[2];
                  int op2Tmp=arrTmp[3]*10+arrTmp[4];
                  int multiResultTmp=op1Tmp*op2Tmp;
                  // 输出临时结果
                  System.out.println("乘积为"+multiResultTmp+" 算式为:"+op1Tmp+"*"+op2Tmp);
                  
                  if(multiResultTmp>multiResult){
                      multiResult=multiResultTmp;
                      op1=op1Tmp;
                      op2=op2Tmp;
                  }
              }
              
              // 输出最大乘积,乘数,被乘数
              System.out.println("最大乘积为"+multiResult+" 算式为:"+op1+"*"+op2);
          }
          
          /** *//**
           * 全排列,将排列结果变成新数组存入链表
           * @param arr
           * @param start
           * @param end
           */
          private void permutation(Integer[] arr,int start,int end){
              if(start<end+1){
                  permutation(arr,start+1,end);
                  
                  for(int i=start+1;i<end;i++){
                      Integer temp;
                      
                      temp=arr[start];
                      arr[start]=arr[i];
                      arr[i]=temp;
                      
                      permutation(arr,start+1,end);
                      
                      temp=arr[i];
                      arr[i]=arr[start];
                      arr[start]=temp;
                  }
              }
              else{
                  // 创建新数组
                  Integer[] arrNew=new Integer[arr.length];            
                  for(int i=0;i<arrNew.length;i++){
                      arrNew[i]=new Integer(arr[i]);
                  }
                  
                  // 将新数组放入链表
                  ls.add(arrNew);
                  
                  // 输出新数组
                  /**//*for(int i=0;i<end;i++){
                      System.out.print(arrNew[i]+",");
                  }
                  System.out.print("\n");*/
              }
          }      /** *//**
           * 程序入口
           * @param args
           */
          public static void main(String[] args){
              Integer[] arr={5,6,7,8,9};
              new MaxMultiResult(arr);
          }
      }