每个分子和分母都在[1,L]中,因此,每一个分母都存在一个使 分子/分母 最接近A然后比较出最小误差的分子
网上有种叫追赶法
不太理解
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<iostream>
#include<cmath>
#include<algorithm>
#define Max 100001
using namespace std;
typedef long long ll;
int main() {
double A,esp;
int L,ans1,ans2;
cin >> A >> L;
ans1 = ans2 = 1;
esp = fabs(A - 1);
for(int i = 1; i <= L; i++) { //枚举分母
int j = i * A + 0.5; //四舍五入
if(j > L) j = L;
if(j < 1) j = 1;
double esp1 = fabs(A - 1.0 * j / i);
if(esp1 < esp) {
esp = esp1;
ans1 = j;
ans2 = i;
}
}
cout << ans1 <<" " << ans2 << endl;
return 0;
}
逼近分数的追赶法实现

本文介绍了一种通过追赶法寻找最接近特定浮点数A的分数表示的方法。该算法在给定范围[1,L]内枚举分母,通过四舍五入找到最佳分子,以最小化误差。代码使用C++实现,展示了如何通过比较误差来更新最优解。
956

被折叠的 条评论
为什么被折叠?



