【题目描述】
对某一观点表示支持的有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; } /* 反思教训: 一个很简单的模拟而已,但思维没有灵活地转动起来,还是砸在移项上面了。 */