把 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); } }