蓝桥杯省赛真题2014年第五届Java本科B组第06题——奇怪的分式

蓝桥杯省赛真题2014年第五届Java本科B组

第06题——奇怪的分式

上小学的时候,小明经常自己发明新算法。一次,老师出的题目是:

1/4 乘以 8/5

小明居然把分子拼接在一起,分母拼接在一起,答案是:18/45 (参见图1.png)
在这里插入图片描述

老师刚想批评他,转念一想,这个答案凑巧也对啊,真是见鬼!

对于分子、分母都是 1~9 中的一位数的情况,还有哪些算式可以这样计算呢?

请写出所有不同算式的个数(包括题中举例的)。

显然,交换分子分母后,例如:4/1 乘以 5/8 是满足要求的,这算做不同的算式。

但对于分子分母相同的情况,2/2 乘以 3/3 这样的类型太多了,不在计数之列!

注意:答案是个整数(考虑对称性,肯定是偶数)。请通过浏览器提交。不要书写多余的内容。

思路

根据题意,进行枚举查看是否符合条件,注意检查的时候不能直接除,精度不够结果不对,所以要约分

代码

package05届蓝桥杯省赛2014;

public class Question06 {
    
    

	public static void main(String[] args) {
    
    
		int ans=0;
		
		//a是分子,b是分母
		for (int a = 1; a <= 9; a++) {
    
    
			for (int b = 1; b <= 9; b++) {
    
    
				if (a==b) continue;
				//c是分子,b是分母
				for (int c = 1; c <= 9; c++) {
    
    
					for (int d = 1; d <= 9; d++) {
    
    
						if (c==d) continue;
						if (check(a,b,c,d)) {
    
    
							ans++;
						}
					}
				}
			}
		}
		
		System.out.println(ans);
	}

	//注意这里检查的时候不能直接除,精度不够结果不对,所以要约分
	private static boolean check(int a, int b, int c, int d) {
    
    
		int gcd1 = gcd(a*c, b*d); //求等号左边相乘的式子的分子分母的最大公约数
		int gcd2 = gcd(a*10+c,b*10+d); //求等号右边的分子分母的最大公约数
		
		//对等号两边的式子进行各自约分
		if ((a*c)/gcd1 == (a*10+c)/gcd2 && (b*d)/gcd1 == (b*10+d)/gcd2) {
    
    
			return true;
		}
		return false;
	}
	
	//求最大公约数
	private static int gcd(int a,int b) {
    
    
		if (b==0) {
    
    
			return a;
		}
		return gcd(b, a%b);
	}

}

结果

在这里插入图片描述
答案为: 14

猜你喜欢

转载自blog.csdn.net/qq_43594119/article/details/108833973