zoukankan      html  css  js  c++  java
  • Uva 654 Ratio

    题意:

      给两个数, n, m 构造一个序列, 分母从1 ~ m, 并且j / i越来越接近n/m。

    思路:

      如果存在 j / i 趋近于 n / m 那么则有 j = n * i / m + 0.5(四舍五入)

      维护与 n/m的差值即可。

      第一次写的太复杂, 后来看了别人的博客, 才发现原来是自己想多了。  

    代码:

      

     1 #include <cmath>
     2 #include <cstdio>
     3 #include <cstring>
     4 #include <cstdlib>
     5 #include <ctime>
     6 #include <set>
     7 #include <map>
     8 #include <list>
     9 #include <stack>
    10 #include <queue>
    11 #include <string>
    12 #include <vector>
    13 #include <fstream>
    14 #include <iterator>
    15 #include <iostream>
    16 #include <algorithm>
    17 using namespace std;
    18 #define LL long long
    19 #define INF 0x3f3f3f3f
    20 #define MOD 1000000007
    21 #define eps 1e-6
    22 #define MAXN 1000000
    23 #define MAXM 100
    24 #define dd {cout<<"debug"<<endl;}
    25 #define pa {system("pause");}
    26 #define p(x) {printf("%d
    ", x);}
    27 #define pd(x) {printf("%.7lf
    ", x);}
    28 #define k(x) {printf("Case %d: ", ++x);}
    29 #define s(x) {scanf("%d", &x);}
    30 #define sd(x) {scanf("%lf", &x);}
    31 #define mes(x, d) {memset(x, d, sizeof(x));}
    32 #define do(i, x) for(i = 0; i < x; i ++)
    33 #define dod(i, x, l) for(i = x; i >= l; i --)
    34 #define doe(i, x) for(i = 1; i <= x; i ++)
    35 int Gainers, Losers;
    36 void solve()
    37 {
    38     double cnt = (Gainers * 1.0) / (Losers * 1.0);
    39     double ans = INF;
    40     for(int denominator = 1; denominator <= Losers; denominator ++)
    41     {
    42         int molecular = denominator * cnt + 0.5;
    43         double temp = fabs((molecular * 1.0) / (denominator * 1.0) - cnt);
    44         if(temp < ans)
    45         {
    46             ans = temp;
    47             printf("%d/%d
    ", molecular, denominator);
    48         }
    49     }
    50 }
    51 
    52 int main()
    53 {
    54     int kcase = 0;
    55     while(scanf("%d %d", &Gainers, &Losers) != EOF)
    56     {
    57         if(kcase ++) printf("
    ");
    58         solve();
    59     }
    60     return 0;
    61 }
    View Code

      

  • 相关阅读:
    Android MVP架构分析
    JavaEE基本了解
    学习面试题Day09
    使用反射来实现简单工厂模式
    Android Material Design简单使用
    c语言 找最小值
    c++ 计算指定半径圆的面积
    c++ 字符串拷贝以及合并
    python yaml文件读写
    python 列表元素替换以及删除
  • 原文地址:https://www.cnblogs.com/By-ruoyu/p/5002841.html
Copyright © 2011-2022 走看看