贪心算法求埃及分数式
#include <stdio.h> void main() { int a1,b1,a,b,c,d,k,j,t,u,f[20]; printf(" 请输入分数的分子a、分母b: "); scanf("%d,%d",&a1,&b1); if(a1==1 || b1%a1==0) { printf(" %d/%d=%d/%d \n",a1,b1,1,b1/a1); return; } for(d=1;d<=5;d++) {a=a1;b=b1;k=0;t=0; while(1) {c=b/a+d; if(c>1000000000 || c<0) {t=1;break;} if(c==b1)c++; // 保证埃及分数的分母不与给定分数的分母相同 k++;f[k]=c; a=a*c-b; b=b*c; for(u=2;u<=a;u++) while(a%u==0 && b%u==0) {a=a/u;b=b/u;} if(a==1 && b!=b1) //化简后的分数为埃及分数,则赋值后退出 {k++;f[k]=b;break;} } if(t==1) continue; {printf(" %d/%d=1/%d",a1,b1,f[1]); for(j=2;j<=k;j++) printf("+1/%d",f[j]); printf("\n");} } }