16递归:猜算术
【题目】
看下面的算式:
□□ 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);
}
}
}
}
}

浙公网安备 33010602011771号