解题思路:
具体看代码注释
AC代码:
#include <iostream>
using namespace std;
int gcd(int x,int y);
int main()
{
int a,b,l,A,B;
float d,D;
cin>>a>>b>>l;
d=l; //后面与D比较,但D肯定是小于l的
/*if(a==1||b==1)
cout<<a<<' '<<b; //(画蛇添足)别写,首先下面就能出,其次这里导致报错line 2 to long,大概是因为这里直接输出a,b,可能输入时有的太长,不算简
else{*/
for(int i=1;i<=l;i++)
{
for(int j=1;j<=l;j++)
{
D=i*1.0/j-a*1.0/b;
if(D>=0&&i*1.0/j<=l)
if(D<d&&gcd(i,j)==1)
{
d=D; //使D值尽可能小,循环结束后是D最小的那一个
A=i;
B=j;
}
}
}
cout<<A<<' '<<B;
return 0;
}
int gcd(int x,int y) //求最大公约数
{
if(y==0)
return x;
return gcd(y,x%y);
}