uva 654 - Ratio(暴力)

2014-11-24 07:22:12 · 作者: · 浏览: 0

题目链接: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; }