蓝桥杯 奇怪的分式

上小学的时候,小明经常自己发明新算法。一次,老师出的题目是:
1/4 乘以8/5  小明居然把分子拼接在一起,分母拼接在一起,答案是:18/45 
(参见图1.png)老师刚想批评他,转念一想,这个答案凑巧也对啊,真是见鬼!对于分子、
分母都是1~9 中的一位数的情况,还有哪些算式可以这样计算呢?请写出所有不同算式的个数(包括题中举例的)。显然,交换分子分母后,例如:4/1 乘以5/8 是满足要求的,这算做不同的算式。
但对于分子分母相同的情况,2/2 乘以3/3 这样的类型太多了,不在计数之列!
注意:
答案是个整数(考虑对称性,肯定是偶数)。请通过浏览器提交。不要书写多余的内容。

蓝桥杯 奇怪的分式_第1张图片

解法1:

public class Main {
	public static void main(String[] args) {
		int count=0;
	for(int a=1;a<=9;a++) {
		for(int b=1;b<=9;b++) {
			for(int c=1;c<=9;c++) {
				for(int d=1;d<=9;d++) {
					if(a!=b&&c!=d) {
						if(a*c*(b*10+d)==b*d*(a*10+c)) {
							count++;
						}
					}
				}
			}
		}
	}
	System.out.println(count);
	}
}

巧妙避开了分子除以分母是循环小数的问题,使用交叉相乘,就可以用int而不需要用double

解法2:

public class Main {

	public static void main(String[] args) {
		double w = 10e-10;
		int count = 0;
		for (double a = 1; a <= 9; a++) {
			for (double b = 1; b <= 9; b++) {
				for (double c = 1; c <= 9; c++) {
					for (double d = 1; d <= 9; d++) {
						if (a != b && c != d) {
							if (Math.abs(((a * c) / (b * d)) - ((a * 10 + c) / (b * 10 + d))) < w) {
								count++;
							}
						}
					}
				}
			}
		}
		System.out.println(count);
	}
}

w:10e-10是误差值(10e-10是10*10的-10次方的意思)

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