看来楼主的递归真的应该很巧,普通方法如下,可能写的复杂了点。。。
程序代码:
[ 本帖最后由 yjk0307 于 2012-12-19 14:34 编辑 ]
程序代码:#include<stdio.h>
void main()
{
double a,b,c,d,n,s[1000];
int i,j,m=0,k,p[1000],q[1000];
scanf("%lf,%lf,%lf,%lf,%lf",&a,&b,&c,&d,&n);
for(i=2;i<=n;i++)
{
for(j=1;j<i;j++)
{
if((double)j/i>(a/b)&&(double)j/i<(c/d))
{
for(k=j/2;k>1;k--)
if(0==i%k&&0==j%k)
break;
if(1==k)
{
p[m]=j;
q[m]=i;
s[m]=(double)j/i;
m++;
}
}
}
}
for(i=0;i<m-1;i++)
{
if(s[i]<s[i+1]);
else
{
for(i=0;i<m-1;i++)
if(s[i]>s[i+1])
{
k=p[i],p[i]=p[i+1],p[i+1]=k;
k=q[i],q[i]=q[i+1],q[i+1]=k;
n=s[i],s[i]=s[i+1],s[i+1]=n;
}
i=-1;
}
}
for(i=0;i<m;i++)
printf("%d/%d\n",p[i],q[i]);
}[ 本帖最后由 yjk0307 于 2012-12-19 14:34 编辑 ]










