比例简化

【题目描述】

对某一观点表示支持的有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;
}

/*
    反思教训:
        一个很简单的模拟而已,但思维没有灵活地转动起来,还是砸在移项上面了。
*/

 

posted @ 2016-08-26 14:42  前前前世。  阅读(329)  评论(0编辑  收藏  举报