第三题
三羊献瑞
观察下面的加法算式:
其中,相同的汉字代表相同的数字,不同的汉字代表不同的数字。
请你填写“三羊献瑞”所代表的4位数字(答案唯一),不要填写任何多余内容。
答案这个题目完全可以使用暴力破解模型,就是从0~9中选取8个数,进行全排列,然后看情况是否符合
但是我在这里遇到了一个问题 就是暴力破解模型失误了,怎么说,需要选取8个数 我排了10个数,然后数据得到的结果错误了
后来一想我没有错 毕竟答案唯一:1085 美滋滋
import java.util.Stack;
//思想得出全排列 然后选取前八个数据为数据排列 进行测试
//如果数据复习排列规则 就输出
//但是这个地方 我错误点在于将其10个全排列
//然后选取其中的前八个作为数据
public class Test3A {
private static int count = 0;
private static int sum = 0;
public static void main(String[] args) {
Stack<Integer> stack = new Stack<Integer>();
for (int i = 0; i <= 9; i++) {
stack.push(i);
fun(stack);
stack.pop();
}
System.out.println(count);
System.out.println(sum);
} private static void fun(Stack<Integer> stack) {
for (int j = 0; j <= 9; j++) {
if (stack.size() == 10) {
int a = stack.get(0);
int b = stack.get(1);
int c = stack.get(2);
int d = stack.get(3);
int e = stack.get(4);
int f = stack.get(5);
int g = stack.get(6);
int h = stack.get(7);
if (check(a, b, c, d, e, f, g, h)) {
++count;
System.out.printf("%d %d %d %d %d %d %d %d", a, b, c, d, e, f, g, h);
System.out.println(); }
return;
} if (!stack.contains(j)) {
stack.push(j);
fun(stack);
stack.pop();
}
}
} private static boolean check(int... args) {
int ABCD = args[0] * 1000 + args[1] * 100 + args[2] * 10 + args[3];
int EFGB = args[4] * 1000 + args[5] * 100 + args[6] * 10 + args[1];
int EFCBH = args[4] * 10000 + args[5] * 1000 + args[2] * 100 + args[1] * 10 + args[7];
if (ABCD + EFGB == EFCBH && args[4] != 0) {
return true;
}
return false;
} }