题目描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
上小学的时候,小明经常自己发明新算法。一次,老师出的题目是:\frac{1}{4}41 乘以 \frac{8}{5}58
小明居然把分子拼接在一起,分母拼接在一起,答案是:\frac{18}{45}4518 (参见下图)
![](https://i-blog.csdnimg.cn/blog_migrate/598dbc5fd2d00148ec366db1bbb2beb2.png)
老师刚想批评他,转念一想,这个答案凑巧也对啊,真是见鬼!
对于分子、分母都是 11 ~ 99 中的一位数的情况,还有哪些算式可以这样计算呢?
请写出所有不同算式的个数(包括题中举例的)。
显然,交换分子分母后,例如:\frac{4}{1}14 乘以 \frac{5}{8}85 是满足要求的,这算做不同的算式。
但对于分子分母相同的情况,\frac{2}{2}22 乘以 \frac{3}{3}33 这样的类型太多了,不在计数之列!
运行限制
最大运行时间:1s
最大运行内存: 128M
结题思路:
判断时把除的形式,转为乘法形式(本来列举了很多除法的可能情况……);
a c a*10+c
- - - * - - - = - - - - - - - -
b d b*10+d
判断:a != b && c != d &&a * c * (b * 10 + d) == b * d * (a * 10 + c)
写a跟b,c跟d就行了,不用考虑用不用再列举a跟c,b跟d什么的,因为每个数都是在循环里从1到9,所以四个位置上1-9每个数都会出现,如果再列举a跟c,b跟d等,可能就会重复计数了(别问我为什么知道)
代码:
class Main{
public static void main(String[] args) {
int a,b,c,d;
int count = 0;
for(int i=1;i<=9;i++) {
for(int j = 1;j<=9;j++) {
for(int y = 1;y<=9;y++) {
for(int z = 1;z<=9;z++) {
if(f(i,j,y,z)) {
count++;
}
}
}
}
}
System.out.println(count);
}
public static boolean f(int a,int b, int c,int d) {
if(a != b && c != d &&a * c * (b * 10 + d) == b * d * (a * 10 + c)){
return true;
}
return false;
}
}