Python 贪心法:真分数表示为埃及分数之和

贪心法:输入一个真分数,编写程序输出其表示为埃及分数之和的形式。如7/8=1/2+1/3+1/24,15/16=1/2+1/3+1/10+1/240,分母和分子分别由键盘分两次输入。

帮同学写实验报告,这是众多题目里面比较中意的一题,也是花时间比较多的一题。

解题思路

设原数值为f,f减去比该数值小一点或相等的最大的埃及分数1/c(<=f),其结果作为新的f=f-1/c,直到f=0。如何找到这个埃及分数呢?其实很简单,c=⌈1/f⌉(⌈⌉表示上取整)。

核心函数

核心函数

解释:round()函数是用来砍掉误差项的,ceil()函数是上取整函数。因为运算过程中会产生形如4.000000000004这样的数,如果不先砍掉误差项的话,ceil(4.000000000004)得到的结果是5,这显然是错的。

代码

import math
a=int(input('分子:'))
b=int(input('分母:'))
f=a/b
s='%d/%d='%(a,b)
while f > 1e-8:
    c=math.ceil(round(1/f,8))
    s+='1/%d+'%(c)
    f=f-1/c
s=s[:-1]
print(s)

代码原图,我平时是用Jupyter Notebook/python 3.0的,因为老师教学用这个。
Python 贪心法:真分数表示为埃及分数之和_第1张图片

写在最后

读者觉得代码有什么漏洞欢迎指出。我这里是取8位精度,你们可以试着修改完善。不敢说我的代码100%完美,但绝对兼顾了简洁+效用。

在开始之前我也参考过网络上的解法,不过很少看到有用python做的,即使有也做得挺复杂,特别是用c语言做的,哇真的是觉得太长了,看不进去,对一个用惯python的人,简直受不了。于是我就自己捣鼓,并且花了很多时间去完善,想法、思路、代码都是自己想的,如有雷同纯属巧合。

也正因花了不少精力,不忍心仅仅为了帮别人完成一次作业,所以决定发表出来。第一次写博客,排版什么的都很简陋,喜欢大家多多包涵、多多支持。

@Tin立志当程序猿

你可能感兴趣的:(Python 贪心法:真分数表示为埃及分数之和)