原题链接:
洛谷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; }
我可能写的不好,如果有问题,请指出,谢谢。