寒假每日一题打卡day32—— ACWing 458. 比例简化

【题目描述】
在这里插入图片描述
【思路】
枚举 欧几里得定理
L在100以内,枚举 A′(a), B′(b)的所有组合,判断:

  • a和b是否互质
  • A / B <= a / b且a/b−A/B的值尽可能小

实际上不需要判断互质,因为a,b都是从 1开始枚举的,如果a,b不互质,那么一定存在最大公约数c,也就是说存在比a、b更小的数a/c和b/c满足。所以最后不管如何都不可能取得的最接近原来比例的两个数是不互质的,因为如果这两个数不互质,那就存在比他们小的互质的数和他们的比例一样

import java.io.*;
class Main{
    /*
    //判断a和b是否互质
    public static boolean gcd(double a, double b){
        if( b == 0) return a == 1.0;
        return gcd(b, a % b);
    }*/
    public static void main(String args[]) throws Exception{
        BufferedReader  bf = new BufferedReader(new InputStreamReader(System.in));
        String s[] = bf.readLine().split(" ");
        
        double A = Double.parseDouble(s[0]), B = Double.parseDouble(s[1]), L = Double.parseDouble(s[2]);
        double AA = A, BB = B;
        double esp = Double.MAX_VALUE;
        
        for(double a = 1; a <= L; a++)
            for(double b = 1; b <= L; b++){
                // A / B <= a / b --->  A * b <= B * a;
                if( (A * b <= B *a) ){
                    //a/b−A/B的值尽可能小 
                    if( a/b - A/B < esp){
                        esp = a/b - A/B;
                        AA = a;
                        BB = b;
                    }
                }
                
            }
        System.out.println((int)AA + " "+ (int)BB);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值