题意:
给出a和b,找出一个序列,要求分母i由1到b,分子u是所有可能的分子中u/i最接近a/b的,然后将中的一些项删除,保证所u/i是越来越接近a/b的。
解析:
暴力枚举分母i,分子u = i * a /b(四舍五入),然后维护一个标准,保证是接近的。
AC代码
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <cstdlib>
using namespace std;
typedef long long ll;
const int INF = 0x3f3f3f3f;
const double eps = 1e-8;
int a, b;
int main() {
int flag = 0;
while(scanf("%d%d", &a, &b) != EOF) {
if(flag++) puts("");
double rec = 1.0 * a/b, tmp = INF;
for(int i = 1; i <= b; i++) {
int x = (int)(rec*i + 0.5);
if(fabs(1.0*x/i - rec) < tmp) {
printf("%d/%d\n", x, i);
tmp = fabs(1.0*x/i - rec);
}
}
}
return 0;
}
本文介绍了一种通过生成分子分母序列来逼近特定分数的方法。该算法通过枚举分母并选择最接近目标比例的分子,从而形成一系列分数,这些分数逐渐逼近给定的目标分数。文中提供了一个C++实现示例。
2万+

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



