【2014省赛试题】奇怪的分式(递归求公约数)
原创
©著作权归作者所有:来自51CTO博客作者阿呆小记的原创作品,请联系作者获取转载授权,否则将追究法律责任
标题:奇怪的分式
上小学的时候小明经常自己发明新算法。一次,老师出的题目是:
1/4 乘以 8/5
小明居然把分子拼接在一起,分母拼接在一起,答案是:18/45
老师刚想批评他,转念一想,这个答案凑巧也对啊,真是见鬼!
对于分子、分母都是1~9中的一位数的情况,还有哪些算式可以这样计算呢?
请写出所有不同算式的个数(包括题中举例的)。
- 显然,交换分子分母后,例如:4/1乘以5/8是满足要求的,这算做不同的算式。
- 但对于分子分母相同的情况,2/2乘以3/3这样的类型太多了,不在计数之列!
注意:答案是个整数(考虑对称性,肯定是偶数)。请通过浏览器提交。不要书写多余的内容。
public class Test06_奇怪的分式 {
public static void main(String[] args) {
int count = 0;
for (int i = 1; i < 10; i++) { // 左分子
for (int j = 1; j < 10; j++) { // 左分母
if (i==j) continue;
for (int k = 1; k < 10; k++) { // 右分子
for (int l = 1; l < 10; l++) { // 右分母
if (k==l) continue;
// 求最大公约数
int gcd1 = gcd(i*k,j*l);
int gcd2 = gcd(i*10+k,j*10+l);
// 同除公约数比较值
if (i*k/gcd1 == (i*10+k)/gcd2 && j*l/gcd1==(j*10+l)/gcd2){
System.out.println(i+" "+j+" "+k+" "+l);
count++;
}
}
}
}
}
System.out.println(count); // 14
}
/**
* todo 递归求两数的最大公约数
* @param a
* @param b
* @return
*/
private static int gcd(int a, int b) {
if (b==0) return a;
return gcd(b,a%b);
}
}
递归求公约数:m % n