题目链接:uva 654 - Ratio
题目大意:给出a和b,找出一个序列,要求分母i由1到b,分子u是所有可能的分子中u/i最接近a/b的,然后将中的一些项删除,保证所u/i是越来越接近a/b的。
解题思路:暴力枚举分母i,分子u = i * a /b(四舍五入),然后维护一个标准,保证是接近的。
#include#include const double INF = 0x3f3f3f; bool cmp(double a, double b) { return a - b < 0; } int main() { int a, b, cas = 0; while (scanf("%d%d", &a, &b) == 2) { if (cas++) printf("\n"); double p = 1.0 * a / b, tmp = INF; for (int i = 1; i <= b; i++) { int u = (int) i * p + 0.5; if(cmp(fabs(1.0*u/i - p), tmp)) { tmp = fabs(1.0*u/i - p); printf("%d/%d\n", u, i); } } } return 0; }