【每日藍橋】22、一四年省賽Java組真題“奇怪的分式”

你好呀,我是灰小猿,一個超會寫bug的程序猿!

歡迎大家關注我的專欄“每日藍橋”,該專欄的主要作用是和大家分享近幾年藍橋杯省賽及決賽等真題,解析其中存在的算法思想、數據結構等內容,幫助大家學習到更多的知識和技術!

標題:奇怪的分式

上小學的時候,小明經常自己發明新的算法,一次,老師出的題目是:

1/4 乘以 8/5

小明居然把分子拼接在一起,把分母拼接在一起,答案是:18/45  (參見圖1.png)

老師剛想批評,轉念一想,這個答案湊巧也對啊,真是見鬼!

對於分子、分母都是1~9中的一位數的情況,還有哪些算式可以這樣計算呢?

請寫出所有不同算式的個數(包括題中舉例的)

顯然,交換分子分母后,例如:4/1乘以5/8是滿足要求的,這算做不同的算式

但對於分子分母相同的情況,2/2 乘以 3/3這樣的類型太多了,不在計數之列!

注意:答案是個整數,(考慮對稱性,肯定是偶數),請通過瀏覽器提交,不要書寫多餘的內容。

解題思路:

本題在計算中主要就是用到了四個for循環,假設兩個算式分別是a/b 和 c/d

那麼我們要把a、b、c、d所有的可能全部都枚舉出來,然後根據題目中的要求,我們應該即將結果得到的兩個分式進行約分,看約分後兩個數是否相等。

主要用到的方法就是求兩個數的最大公約數和分數的約分比較

答案源碼:

public class Year2014_Bt6 {

	public static void main(String[] args) {
		int ans = 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++) {
						if (a==b&&c==d) {
							continue;
						}
						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) {
							ans++;
						}
					}
				}
				
			}
			
		}
		System.out.println(ans);
	}
	
	/**
	 * 求兩個數的最大公約數
	 * */
	static public int gcd(int a,int b) {
		if (a%b==0) {
			return b;
		}
		return gcd(b, a%b);
	}
		
}

 

 

輸出樣例:

其中有不足或者改進的地方,還希望小夥伴留言提出,一起學習!

感興趣的小夥伴可以關注專欄!

灰小猿陪你一起進步!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章