埃及分数问题(贪心算法)

 

一、问题描述

把一个真分数表示成最少的埃及分数之和。

埃及分数即分子为1的分数。例如    7/8=1/2+1/3+1/24;

1.判断这个分数是不是埃及分数

2.形成1/2 1/3 1/4 ........1/n

3.fn=fn+1-1/n

4.fn==0 ?

代码

//埃及分数问题
#include
#include
struct FS{int a;int b;
};
int is_aijifs(FS* f);
FS simple(FS* f);
int gcd(FS* f);
int main(){FS f;int m=2;printf("请输入分子分母,以空格隔开!\n");scanf("%d%d",&f.a,&f.b);printf("%d/%d=",f.a,f.b);while(1){if(is_aijifs(&f)){printf("%d/%d",f.a,f.b);break;}while(1.0*f.a/f.b<1.0*1/m)   m++;printf("1/%d+",m);f.a=f.a*m-1*f.b;f.b=f.b*m;//printf("%d %d",f.a,f.b);f=simple(&f);//    printf("%d %d",f.a,f.b);}return 0;
}
int is_aijifs(FS* f){if(f->a==1) return 1;return 0;
}
FS simple(FS* f){int g=gcd(f);f->a=f->a/g;f->b=f->b/g;//printf("   %d\n",f->a);return *f;//有问题
}
int gcd(FS* f){FS f1;f1=*f;int r;while(1){r=f1.a%f1.b;f1.a=f1.b;f1.b=r;//printf("    %d\n",r);if(r==0) return f1.a;}
}


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部