题意:
给出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;
}