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的,因为老师教学用这个。
全部代码

写在最后

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

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

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

@Tin立志当程序猿

  • 8
    点赞
  • 7
    收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页
评论

打赏作者

「已注销」

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值