三羊献瑞
观察下面的加法算式:
祥 瑞 生 辉
+ 三 羊 献 瑞
-------------------
三 羊 生 瑞 气
(如果有对齐问题,可以参看【图1.jpg】)
其中,相同的汉字代表相同的数字,不同的汉字代表不同的数字。
请你填写“三羊献瑞”所代表的4位数字(答案唯一),不要填写任何多余内容。
【解析】
这是一道无重复的组合并排序的题目!!!
解决方法:一种是暴力枚举,另一种是递归回溯
填空题直接用暴力枚举就行了,这题和第四届蓝桥杯省赛真题-填空题-马虎的算式(Java实现)是一样的题型
方法一:暴力枚举
package 第六届省赛;
public class _3三羊献瑞 {
public static void main(String[] args) {
for(int a=0;a<=9;a++) {
for(int b=0;b<=9;b++) {
for(int c=0;c<=9;c++) {
for(int d=0;d<=9;d++) {
for(int e=0;e<=9;e++) {
for(int f=0;f<=9;f++) {
for(int g=0;g<=9;g++) {
for(int i=0;i<=9;i++) {
if(b!=a&&c!=b&&c!=a&&
d!=c&&d!=b&&d!=a&&
e!=d&&e!=c&&e!=b&&e!=a&&
f!=e&&f!=d&&f!=c&&f!=b&&f!=a&&
g!=f&&g!=e&&g!=d&&g!=c&&g!=b&&g!=a&&
i!=g&&i!=f&&i!=e&&i!=d&&i!=c&&i!=b&&i!=a) {
int x = a*1000+b*100+c*10+d;
int y = e*1000+f*100+g*10+b;
int z = e*10000+f*1000+c*100+b*10+i;
if(x+y==z) {
if(y/1000>0) //取四位的数字
System.out.println(y);
}
}
}
}
}
}
}
}
}
}
}
}
方法二:递归回溯
package 第六届省赛;
/**
* 递归回溯
* @author wzc
* @date 2021年1月24日
*/
public class _3三羊献瑞2 {
public static void main(String[] args) {
int a[] = new int[8];//abcdefgh一共8个未知数
int[] b = new int[10]; //从b里取数0-9
for(int i=0; i<b.length; i++) {
//填充b数组
b[i] = i;
}
//调用f()
f(a,b,0);
}
private static void f(int[] a, int[] b, int i) {
//结束条件
if(i==a.length) {
int x = a[0]*1000+a[1]*100+a[2]*10+a[3];
int y = a[4]*1000+a[5]*100+a[6]*10+a[1];
int z = a[4]*10000+a[5]*1000+a[2]*100+a[1]*10+a[7];
if(x+y==z) {
if(y/1000>0)
System.out.println(y);
}
return;
}
for(int j=0; j<b.length; j++) {
if(b[j]!=-1) {
a[i] = b[j]; //取数放进容器a里
b[j]=-1; //已使用,标记-1
f(a,b,i+1);
b[j] = a[i]; //调用结束了,把容器a里的数还回去
}
}
}
}
结果
1085