【题目】
看下面的算式: □□ x □□ = □□ x □□□ 它表示:两个两位数相乘等于一个两位数乘以一个三位数。 如果没有限定条件,这样的例子很多。 但目前的限定是:这9个方块,表示1~9的9个数字,不包含0。 该算式中1至9的每个数字出现且只出现一次! 比如: 46 x 79 = 23 x 158 54 x 69 = 27 x 138 54 x 93 = 27 x 186 ….. 请编程,输出所有可能的情况! 注意: 左边的两个乘数交换算同一方案,不要重复输出! 不同方案的输出顺序不重要import java.math.BigInteger;import java.util.*;public class Lanq { //public static double pi = 3.1415926535897932; public static void main(String[] args) { Scanner sc = new Scanner(System.in); solve(); } public static void solve() { Set s = new TreeSet(); int a = 0, b = 0, c = 0, d = 0; boolean[] bool = new boolean[1000]; bool[a] = false; bool[b] = false; bool[c] = false; bool[d] = false; bool [a+b]=false; for (a = 10; a <= 99; a++) for (b = 10; b <= 99; b++) for (c = 10; c <= 99; c++) for (d = 100; d <= 999; d++) { if (a * b == c * d) { int[] p = new int[9]; p[0] = a / 10; p[1] = a % 10; p[2] = b / 10; p[3] = b % 10; p[4] = c / 10; p[5] = c % 10; p[6] = d / 100; p[7] = d / 10 % 10; p[8] = d % 10; Arrays.sort(p); int cnt = 0; for (int i = 0; i < 8; i++) { if (p[i] + 1 == p[i + 1]) cnt++; } if (cnt == 8 && p[0] == 1 && p[8] == 9) { if(s.contains(a)&&s.contains(b)&&s.contains(a+b)) continue; else System.out.println(a + "*" + b + "=" + c + "*" + d); //System.out.println(b + "*" + a + "=" + c + "*" + d); s.add(a);s.add(b);s.add(a+b); } } } }}