洛谷P2118信息奥赛一本通1966 比例简化

原题链接:

洛谷https://www.luogu.com.cn/problem/P2118

信息奥赛一本通http://ybt.ssoier.cn:8088/problem_show.php?pid=1966

 

 这个题目给出的数据范围并不大,可以枚举所有的分母,并算出分子,判断是否互质,再取与原分数差最小的数,得到答案。

代码:

c:

#include<stdio.h>
int hz(int q,int w){
    for(int i=2;i<=q&&i<=w;i++)if(q%i==0&&w%i==0)return 0;
    return 1;
    }
int main(){
    int a,b,l,c,xa,xb,f;double min,d,e;
    scanf("%d%d%d",&a,&b,&l);e=1.0*a/b;
min=100000;
    for(int i=1;i<=l;i++){
        c=i*a/b;
        if(c>0&&c<=l&&hz(c,i)){
            d=1.0*c/i;
            if(d>=e&&d-e<min){min=d-e;xa=c;xb=i;    }
        }
        c++;
        if(c>0&&c<=l&&hz(c,i)){
            d=1.0*c/i;
            if(d>=e&&d-e<min){min=d-e;xa=c;xb=i;    }
        }        
        }
    printf("%d %d",xa,xb);
    return 0;    
} 

我可能写的不好,如果有问题,请指出,谢谢。

原文地址:https://www.cnblogs.com/sy666/p/12532383.html