第六届蓝桥杯大赛省赛真题-填空题-三羊献瑞(Java实现)

三羊献瑞

观察下面的加法算式:

      祥 瑞 生 辉
  +   三 羊 献 瑞
-------------------
   三 羊 生 瑞 气
   
(如果有对齐问题,可以参看【图1.jpg】)
其中,相同的汉字代表相同的数字,不同的汉字代表不同的数字。
请你填写“三羊献瑞”所代表的4位数字(答案唯一),不要填写任何多余内容。

第六届蓝桥杯大赛省赛真题-填空题-三羊献瑞(Java实现)_第1张图片

【解析】

这是一道无重复的组合并排序的题目!!!
解决方法:一种是暴力枚举,另一种是递归回溯
填空题直接用暴力枚举就行了,这题和第四届蓝桥杯省赛真题-填空题-马虎的算式(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

你可能感兴趣的:(蓝桥杯,java,蓝桥杯)