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