设计一个算法,把一个真分数表示为埃及分数之和的形式。
所谓的埃及分数是指分子为1的分数,如7/8=1/2+1/3+1/24.
要求用最少的埃及分数来表示。
即:输入A/B,用最少的埃及分数去表示A/B这个分数。
贪心算法:
1 #include<stdio.h> 2 int fun(int A,int B); 3 int main() 4 { 5 int A,B; 6 scanf("%d%d",&A,&B); 7 if(A>=B) return 0; 8 else fun(A,B); 9 return 0; 10 } 11 int fun(int A,int B) 12 { 13 int D,C,flag=0; 14 printf("%d/%d=",A,B); 15 if(A==1) 16 { 17 printf("%d/%d\n",A,B); 18 return 0; 19 } 20 else 21 { 22 while(A!=1) 23 { 24 D=B/A; 25 C=D+1; 26 if(flag==0) 27 { 28 printf("1/%d",C); 29 flag=1; 30 } 31 else 32 { 33 printf("+1/%d",C); 34 } 35 A=A*C-B; 36 B=B*C; 37 if(B%A==0) 38 { 39 B=B/A; 40 A=1; 41 } 42 } 43 printf("+%d/%d",A,B); 44 printf("\n"); 45 } 46 }