B DEF
A + --- + ------- = 10
C GHI
这个算式中A~I代表1~9的数字,不同的字母代表不同的数字。
比如:
6+8/3+952/714 就是一种解法,
5+3/1+972/486 是另一种解法。
这个算式一共有多少种解法?
思路:第一想法就是九层枚举,判断一下,但是有一点需要注意,除法这块要转换小数类型。答案是29!!
public class Main {
public static void main(String[] args) {
int ans = 0;
for (int a = 1; a < 10; a++) {
for (int b = 1; b < 10; b++) {
for (int c = 1; c < 10; c++) {
for (int d = 1; d < 10; d++) {
for (int e = 1; e < 10; e++) {
for (int f = 1; f < 10; f++) {
for (int g = 1; g < 10; g++) {
for (int h = 1; h < 10; h++) {
for (int i = 1; i < 10; i++) {
if ((a != b && a != c && a != d && a != e && a != f && a != g && a != h && a != i)
&& (b != c && b != d && b != e && b != f && b != g && b != h && b != i)
&& (c != d && c != e && c != f && c != g && c != h && c != i)
&& (d != e && d != f && d != g && d != h && d != i)
&& (e != f && e != g && e != h && e != i)
&& (f != g && f != h && f != i)
&& (g != h && g != i)
&& (h != i)) {
int up = d * 100 + e * 10 + f;
int down = g * 100 + h * 10 + i;
if (a + (b * 1.0 / c)+ (up * 1.0) / (down * 1.0) == 10) {
ans++;
}
}
}
}
}
}
}
}
}
}
}
System.out.println(ans);
}
}
下面再用全排列解法搞一遍。
public class Main{
static int ans = 0;
public static void main(String[] args) {
int[] arr = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
swap(arr, 0);
System.out.println(ans);
}
public static void swap(int[] arr, int n) {
if (n == arr.length) {
if (arr[0] + ((double) arr[1] / arr[2]) +
((double) arr[3] * 100 + arr[4] * 10 + arr[5]) / (arr[6] * 100 + arr[7] * 10 + arr[8]) == 10) {
ans++;
}
} else {
for (int i = n; i < arr.length; i++) {
int a = arr[n]; arr[n] = arr[i]; arr[i] = a;
swap(arr, n + 1);
int b = arr[n]; arr[n] = arr[i]; arr[i] = b;
}
}
}
}