全排列的应用算法

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

 */
package 基础题;

import java.util.ArrayList;




public class MaxSum {
 static ArrayList<String> ls=new ArrayList<String>();
public static void main(String[] args) {
// TODO Auto-generated method stub
 String str="56789";
 char c[] = str.toCharArray();// 声明一个字符型数组
        int max=0;
        String rs=null;
ArrayList<String> list=sort(c, 0, c.length - 1);
for(int i=0;i<list.size();i++){
String str1=list.get(i).substring(0, 3);
String str2=list.get(i).substring(3);
int result=Integer.parseInt(str1)*Integer.parseInt(str2);
if(max<result){
max=result;
rs=str1+"*"+str2;
}
System.out.println(str1+"*"+str2+"="+result);
}
System.out.print("最大的乘积为:"+max);

}
public static ArrayList<String> sort(char c[],int begin,int end){
String str="";
if(begin==end){//如果begin==end说明数组中的元素交换完毕,可以打印输出
for(int i=0;i<=end;i++){
str+=c[i];
}
   ls.add(str);
// System.out.println();
}else{
for(int i=begin;i<=end;i++){
//将首元素与气候的第i个元素进行交换
char temp=c[begin];
c[begin]=c[i];
c[i]=temp;
//递归循环调用
sort(c,begin+1,end);
//还原数组
c[i]=c[begin];
c[begin]=temp;
}
}
return ls;
}

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值