#include <stdio.h> #include <stdlib.h> #define MAX 10000000 int a,b; //a<b int final[100]; int temp[100]; int n; int find=0; void score(int x,int y,int m) { if(m==n) { if(y%x==0&&y>x*temp[m-1]) { temp[m]=y/x; int k=n; find=1; while(true) { if(temp[k]==final[k]) { --k; continue; } if(temp[k]<final[k]) { int i=1; for(;i<=n;++i) { final[i]=temp[i]; } break; } if(temp[k]>final[k]) { break; } } } return; } else { int i; int st=((y/x)>(temp[m-1]+1))? (y/x):(temp[m-1]+1); int ed=(n-m+1)*y/x; for(i=st;i<=ed;++i) { temp[m]=i; if(x*i-y<0) { continue; } else { score(x*i-y,y*i,m+1); } } } } int main() { scanf("%d%d",&a,&b); int i; for(i=0;i<100;++i) { final[i]=MAX; } temp[0]=0; for(n=2;;++n) { score(a,b,1); if(find==1) { i=1; for(;i<n;++i) { printf("1/%d+",final[i]); } printf("1/%d=%d/%d/n",final[n],a,b); break; } } return 0; } 不解释,暴力求解法+剪枝的典型.