1、问题描述
把 1~9 这9个数字分成两组,中间插入乘号,
有的时候,它们的乘积也只包含1~9这9个数字,而且每个数字只出现1次。
比如:
984672 * 351 = 345619872
98751 * 3462 = 341875962
9 * 87146325 = 784316925
…
符合这种规律的算式还有很多,请你计算在所有这些算式中,乘积最大是多少?
2、代码实现
import java.util.HashSet;
public class 最大乘积 {
static char[] arr = {'1','2','3','4','5','6','7','8','9'};
static int max = 0;
public static void main(String[] args) {
arrange(0);
System.out.println(max);
}
public static void arrange(int k) {
if(k == 9) {
//将数组转为对应的int类型数字
int s = 0;
for(int i = 0;i < 9;i++) {
s = s * 10 + (arr[i] - 48);
}
//将该数字裁剪,相乘得到结果
trim(s);
return;
}
for(int i = k;i < 9;i++) {
swap(i,k);
arrange(k + 1);
swap(i,k);
}
}
public static void swap(int a,int b) {
char t = arr[a];
arr[a] = arr[b];
arr[b] = t;
}
//用*分割,并把这两个数相乘
public static void trim(int n) {
String s = n + "";
for(int i = 1;i < 9;i++) {
int n1 = Integer.parseInt(s.substring(0,i));
int n2 = Integer.parseInt(s.substring(i));
//验算结果
boolean flag = repeat(n1 * n2);
if(flag) {
max = Math.max(max, n1 * n2);
}
}
}
//是否有重复数字
public static boolean repeat(int n) {
HashSet<Integer> set = new HashSet<>();
while(n > 0) {
if(n % 10 == 0) {
return false;
}
set.add(n % 10);
n /= 10;
}
return set.size() == 9;
}
}