zoukankan      html  css  js  c++  java
  • 比例简化

    【题目描述】

    对某一观点表示支持的有1498人,反对的有902人,那么赞同与反对的比例可以简单的记为1498 : 902。不过,这个比例的数值太大,难以一眼看出它们的关系。对于上面这个例子,如果把比例记为5 : 3,虽然与真实结果有一定的误差,但依然能够较为准确地反映调查结果,同时也显得比较直观。

    现给出支持人数A,反对人数B,以及一个上限L,请你将A比B化简为A’比B’,要求在A’和B’均不大于L且A’和B’互质(两个整数的最大公约数是1)的前提下,A’/B’ ≥ A/B且A’/B’ - A/B的值尽可能小。

    【输入描述】

    输入共一行,包含三个整数A、B、L,每两个整数之间用一个空格隔开,分别表示支持人数、反对人数以及上限。

    【输出描述】

    输出共一行,包含两个整数 A’、B’,中间用一个空格隔开,表示化简后的比例。

    【样例输入】

    1498 902 10

    【样例输出】

    5 3

    【数据范围及提示】

    对于100%的数据,1 ≤ A ≤ 1000000,1 ≤ B ≤ 1000000,1 ≤ L ≤ 100,A/B ≤ L。

    源代码:
    
    #include<cstdio>
    int A,B,L,Sum1=1000000,Sum2=1; //别忘记初始值。
    int GCD(int t1,int t2) //辗转相除。
    {
        if (!t2)
          return t1;
        return GCD(t2,t1%t2);
    }
    int main()
    {
        scanf("%d%d%d",&A,&B,&L);
        for (int a=1;a<=L;a++)
          for (int b=1;b<=L;b++) //睁大狗眼看数据范围。
            if (GCD(a,b)==1&&B*a>=A*b) //皆为题目要求的转化。
              if (Sum1*b>=Sum2*a)
              {
                Sum1=a;
                Sum2=b;
              }
        printf("%d %d",Sum1,Sum2);
        return 0;
    }
    
    /*
        反思教训:
            一个很简单的模拟而已,但思维没有灵活地转动起来,还是砸在移项上面了。
    */
  • 相关阅读:
    每日日报8月12日
    每日日报8月15日
    每日日报8月18日
    每日日报8月9日
    九月29号——动手又动脑
    今日总结
    每周总结
    今日总结
    周总结
    今日总结
  • 原文地址:https://www.cnblogs.com/Ackermann/p/5810292.html
Copyright © 2011-2022 走看看