1200: C.数据处理
时间限制: 1 Sec 内存限制: 64 MB提交: 92 解决: 22
题目描述
做完大学物理实验后,WYL同学得到了很多比例形式的实验结果。比如1498:902,337:124等等。不过,老师对这些比例很不满意。因为比例的数值太大,难以一眼看出与理论值的关系。
对于上面这个例子,如果把比例记为 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,每两个整数之间用一个空格隔开。
(1 ≤ A ≤ 1000000,1 ≤ B ≤ 1000000,1 ≤ L ≤ 100,A/B ≤ L)
输出
输出共一行,包含两个整数 A’,B’,中间用一个空格隔开,表示化简后的比例。
样例输入
1498 902 10
样例输出
5 3
提示
1 ≤ A ≤ 1000000,1 ≤ B ≤ 1000000,1 ≤ L ≤ 100,A/B ≤ L。
来源
代码实现
#include "iostream"
#include "cstring"
using namespace std;
//判断a,b是否互质
bool judge(int a,int b)
{
int temp;
while(b)
{
temp = a%b;
a = b;
b = temp;
}
if(1 == a)
return true;
else
return false;
}
int main()
{
float A,B,L,M,o,p;
while(cin>>A>>B>>L)
{
bool flag=1;
for(int a=1;a<L;a++)
for(float b=1;b<L;b++)
{
if(judge(a,b))
{
float m=a/b,n=A/B;
if(m>=n)
{
if(flag)
{
M=m-n;
flag=0;
o=a;
p=b;
}
if(M>=m-n)
{
M=m-n;
o=a;
p=b;
}
}
}
}
cout<<o<<" "<<p<<endl;
}
return 0;
}