蓝桥杯2016省赛03-凑算式

问题描述

     B      DEF
A + --- + ------- = 10
     C      GHI

这个算式中A~I代表1~9的数字,不同的字母代表不同的数字。

比如:
6+8/3+952/714 就是一种解法,
5+3/1+972/486 是另一种解法。
这个算式一共有多少种解法?

注意:你输出的应该是个整数,不要输出任何多余的内容或说明性文字。
Copy

输入

没有输入。

输出

输出一个整数,即解法总数。


分析:结果为29,直接用的暴力搜索,但是要注意的有两点:

  1. 9个数每个只用了一次
  2. 判断条件不能为原等式,除法会造成精度的缺失。(刚好最近数值分析里面讲了避免误差的两个原则,用加不用减,用乘不用除。)
public class Equation {

	public static void main(String[] args) {
		//暴力搜索
		int count = 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 t1 = c * a * (g*100 + h*10 + i);
												int t2 = b * (g*100 + h*10 + i);
												int t3 = c * (d*100 + e*10 + f);
												int t4 = 10 * c *(g*100 + h*10 + i);
												if (t1 + t2 + t3 == t4) {
													count ++;
												}
											} 
										}
									}
								}
							}
						}
					}
				}
			}
		}
		System.out.println(count);
	}

}

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