样例可以正确输出,但是所有测试点全错,不知问题出在哪里?请各位指点!
#include<bits/stdc++.h>
using namespace std;
int main(){
int n1,m1,n2,m2,k,flag=0;
scanf("%d/%d %d/%d %d",&n1,&m1,&n2,&m2,&k);
//先求分母的最大公约数,再求分母的最小公倍数,通分
//通分后可以的到两个分子,分别是上下限,再遍历这个上下限中间所有的数
//如果出现分子和该分母化简后分母为K,那么就可以输出了
int a=m1,b=m2;
while (b) {
int c=a%b;
a=b;b=c;
}//此时a就是最大公约数
int max_common_divisor=a;
int min_common_multiple=m1*m2/a;
int min_numerator=n1*(min_common_multiple/m1),max_numerator=n2*(min_common_multiple/m2);
if (min_numerator>max_numerator) swap(min_numerator,max_numerator);
for (int i=min_numerator;i<=max_numerator;i++){
//现在的分数为 i/min_common_multiple
int a=i,b=min_common_multiple;
while (b){
int c=a%b;
a=b;b=c;
}//找到了目前分子分母的最大公约数
if((min_common_multiple/a)==k){
if (!flag) {
printf("%d/%d",i/a,k);
flag=1;
}
else printf(" %d/%d",i/a,k);
}
}
return 0;
}