Python 我的Euler 71项目逻辑有什么问题?

Python 我的Euler 71项目逻辑有什么问题?,python,python-3.x,Python,Python 3.x,现在我正在努力解决这个问题 考虑分数n/d,其中n和d是正整数。如果 N 如果我们列出d的约化真分数集≤ 8在上升中 按大小顺序,我们得到: 1/8,1/7,1/6,1/5,1/4,2/7,1/3,3/8,2/5,3/7,1/2,4/7,3/5,5/8, 2/3、5/7、3/4、4/5、5/6、6/7、7/8 可以看出,2/5是紧挨着左边的分数 7月3日 通过列出d的约化真分数集≤ 1000000英寸 按大小的升序,找到分数的分子 就在3/7的左边 当前代码: 分数和math.ceil需要 n

现在我正在努力解决这个问题

考虑分数n/d,其中n和d是正整数。如果 N 如果我们列出d的约化真分数集≤ 8在上升中 按大小顺序,我们得到:

1/8,1/7,1/6,1/5,1/4,2/7,1/3,3/8,2/5,3/7,1/2,4/7,3/5,5/8, 2/3、5/7、3/4、4/5、5/6、6/7、7/8

可以看出,2/5是紧挨着左边的分数 7月3日

通过列出d的约化真分数集≤ 1000000英寸 按大小的升序,找到分数的分子 就在3/7的左边

当前代码: 分数和math.ceil需要

n = 428572
d = 1000000
这两个变量代表原始问题中所述的
n
d
。数字是这样开始的,因为这是
3/7
的一个稍大的表示形式(稍后将转换为分数)

x只是对分数(3,7)的快速引用,所以我不必一直键入它
best
用于跟踪哪个分数最接近
3/7
,但仍在其左侧

while d > 1:

如果
d这不是正确的做事方式。你应该使用。你根本不应该乱搞浮点运算。

你做错了什么:

找到分子


除此之外,按照@sbumb的建议学习Stern Brocot树,这很有用也很有趣。

不要让你觉得自己很愚蠢。但您的答案完全正确,请再次阅读问题,并将最后一行改为:

print( best.numerator )

另外,为了记录在案,有一种更有效的计算方法。

有没有反对票的理由?不完全是。这是一个结构良好的问题。有一些补偿。谢谢你有见地的建议。
x = Fraction(3,7)

best = Fraction(0)
while d > 1:
if Fraction(n,d) >= x:
    n-=1
    else:
        y = Fraction(n,d)
        if (x - y) < (x - best):
        best = y
        d -= 1
        n = int(math.ceil(d*0.428572))
print(best.denominator)
print( best.numerator )