思路
先求出大的和小的之间的比例关系,然后枚举倍数,找到
L
以内误差最小的输出,注意特判比例本来就大于
代码
#include <bits/stdc++.h>
using namespace std;
int main(){
double a, b, eps = 1e9;
int ans = 0, num = 0, ok = 0, n;
scanf("%lf%lf%d", &a, &b, &n);
if(a < b) swap(a, b), ok = 1;
double p = a/b;
if(n <= p){
if(ok) printf("1 %d", n);
else printf("%d 1", n);
return 0;
}
for(int i = 1; i <= n; i ++){
if(p*i > n) break;
double pp;
bool is = 1;
if(((int)(p*i+0.5)) > (p*i)) pp = ((int)(p*i+0.5))-(p*i);
else pp = (p*i) - ((int)(p*i)), is = 0;
if(pp < eps){
eps = pp;
if(is) ans = ((int)(p*i+0.5)), num = i;
else ans = ((int)(p*i)), num = i;
}
}
if(ok) printf("%d %d", num, ans);
else printf("%d %d", ans, num);
return 0;
}