第六届蓝桥杯java b组第三题
第三题
三羊献瑞
观察下面的加法算式:
其中,相同的汉字代表相同的数字,不同的汉字代表不同的数字。
请你填写“三羊献瑞”所代表的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; } }
恐惧源于无知,代码改变世界