第六题:奇怪的分式

第六题:奇怪的分式

题目描述

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

1/4 乘以 8/5

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

image-20210327193708597

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

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

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

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

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

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

答案:

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

    1/4 乘以 8/5 

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

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

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

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

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

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

注意:答案是个整数(考虑对称性,肯定是偶数)。请通过浏览器提交。不要书写多余的内容。*/
public class _06奇怪的算式 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		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) continue;
							if((b*d*(a*10+c))==(a*c*(b*10+d))){
								
								count++;
							}
						}
					}
				}
			}
		System.out.println(count);
		}
}

#include<iostream>
using namespace std;

int ans;  //记录可能的种类
int gcd(int a,int b){  //最大公约数,用来约分 
	if(b==0)
	return 0;
	return gcd(b,a%b);
} 
int main(){
	cout<<gcd(12,16)<<endl;  //验证最大公约式 
	for(int a=1;a<10;a++){
		for(int b=1;b<10;b++){
			if(b==a)
			continue;
			
			for(int c=1;c<10;c++){
				for(int d=1;d<10;d++){
					if(c==d)
					continue;
					int g1=gcd(a*c,b*d);
					int g2=gcd(a*10+c,b*10+d);
					if(a*c/g1==(a*10+c)/g2&&b*d/g1==(b*10+d)/g2)
						printf("%d %d %d %d",a,b,c,d);
						ans++;
					} 
				}
			}
		}
	cout<<ans<<endl;
	return 0;
}
输出:
14

总结

判断是否满足条件式:不能用这个!!!

整数除法可能算出来不对,如下

if(((i/j)*(m/k) == (10*i+m)/(10*j+k))&&(i!=j)&&(m!=k)) {

正确做法:

 //这里一定要注意类型的选择,不应该使用int类型,精度太低应使用double
                                double sum1 = (double) a / b * c / d;
                                double sum2 = (double) (a * 10 + c)/ (b * 10 + d);
                                if (sum1 == sum2) {
                                    count++;
                                }
posted @ 2021-03-27 20:32  记录学习Blog  阅读(130)  评论(0编辑  收藏  举报