做前思考
1、首先N1/M1不一定比N2/M2小,所以以防万一先排个序。
2、再找出在两正分数之间的分子分母最大公约数为1的分数,用一下辗转相除法。
做后总结
1、本人感觉应该还有更好的方法,后续再想想。
#include
int com(const void* a,const void* b)
{
return *(double*)a>*(double*)b?1:-1;
}
int gcd(int i,int k)
{
int x;
while((x=i%k))
{
i=k;
k=x;
}
if(k==1)
{
return 1;
}else{
return 0;
}
}
int main()
{
int i;
double x[2];
int n1,n2,m1,m2,k;
scanf("%d/%d %d/%d %d",&n1,&m1,&n2,&m2,&k);
x[0]=(double)n1/m1;
x[1]=(double)n2/m2;
qsort(x,2,sizeof(double),com);
for(i=1;(double)i/k
{
if((double)i/k>x[0])
{
if(gcd(i,k)==1)
{
printf("%d/%d",i,k);
if((double)(i+1.0)/k>=x[1])
{
printf("\n");
}else{
printf(" ");
}
}
}
}
return 0;
}
觉得有帮助,就点个赞叭!