

解题思路:
具体看代码注释
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);
}

本文详细介绍了如何使用C++实现计算两个整数的最大公约数(gcd)的算法,包括主函数中的嵌套for循环和gcd函数的递归实现,以及关键变量的更新策略。
&spm=1001.2101.3001.5002&articleId=133935345&d=1&t=3&u=30b893ccad4f4561a13e26b7c20e826e)
127

被折叠的 条评论
为什么被折叠?



