最大乘积

把 1~9 这9个数字分成两组,中间插入乘号,
有的时候,它们的乘积也只包含1~9这9个数字,而且每个数字只出现1次。

比如:
984672 * 351 = 345619872
98751 * 3462 = 341875962
9 * 87146325 = 784316925
...

符合这种规律的算式还有很多,请你计算在所有这些算式中,乘积最大是多少?

注意,需要提交的是一个整数,表示那个最大的积,不要填写任何多余的内容。
(只提交乘积,不要提交整个算式)

 答案:

代码:

import java.util.Scanner;
public class Main {
    private static Scanner sc = new Scanner(System.in);
    private static int [] num = new int[10];
    private static boolean [] vis = new boolean[10];
    private static long ans = 0;
    private static void check(long a,long b) {
        long d = a * b;
        boolean [] v = new boolean[10];
        if(d < 100000000 || d > 987654321) return;
        while(d != 0) {
            if(v[(int)(d % 10)] || d % 10 == 0) return;
            v[(int)(d % 10)] = true;
            d /= 10;
        }
        ans = Math.max(ans, a * b);
    }
    private static void cut() {
        for(int i = 0;i <= 7;i ++) {
            long d1 = 0,d2 = 0;
            for(int j = 0;j <= i;j ++) {
                d1 = d1 * 10 + num[j];
            }
            for(int j = i + 1;j < 9;j ++) {
                d2 = d2 * 10 + num[j];
            }
            check(d1,d2);
        }
    }
    private static void dfs(int k) {
        if(k >= 9) {
            cut();
            return;
        }
        for(int i = 1;i <= 9;i ++) {
            if(vis[i]) continue;
            vis[i] = true;
            num[k] = i;
            dfs(k + 1);
            vis[i] = false;
        }
    }
    public static void main(String[] args) {
        dfs(0);
        System.out.println("答案 " + ans);
    }
}
原文地址:https://www.cnblogs.com/8023spz/p/10761037.html