看来楼主的递归真的应该很巧,普通方法如下,可能写的复杂了点。。。
[ 本帖最后由 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 编辑 ]