欧拉计划

什么是欧拉计划? 欧拉计划是一系列具有挑战性的问题,需要数学和编程技能。作为一个喜欢学习数学新领域的人,欧拉计划将是一次有趣的旅程。

null

问题在哪里? 问题就在他们的官方文件中 档案文件 .

让我们从存档中解决一个问题,并了解其复杂性。我随机选择了第116题。 问题116:红色、绿色或蓝色瓷砖 问题陈述 图片[1]-欧拉计划-yiteyi-C++库

解决方案:[建议先自己尝试一下] 红色瓷砖的长度为2,绿色瓷砖的长度为3,蓝色瓷砖的长度为4。

因为,我们需要计算50个单位的黑色方形瓷砖的总面积 k=50 .

def E_116(i, k):
    ways = [1] * i + [0] * (k-i+1)
    for j in range(i, k+1):
        ways[j] += ways[j - 1] + ways[j - i]
    return ways[k] - 1

这里,我们正在初始化我们的函数 E_116() 这就是问题解决方案的逻辑。功能 E_116() 有两个参数 =新彩色(红色、绿色或蓝色)瓷砖覆盖的黑色方形瓷砖数量,以及 K =黑色方形瓷砖的总数。 在函数中,

ways = [1] * i + [0] * (k-i+1)

w 因此,ways是一个列表,其中包含了i-length块可以覆盖50块黑色方形瓷砖的方式总数。例如: w2 在上面的示例中,x=[1,1,1,0,0,0]有1(x3)和0(x3),其中1表示可能的解决方案情况,0表示失败。正如我们可以从问题中比较i=3和k=5,我们总共得到了3种可能的方法。因此,列表中有1(x3)种方式。 w3

for j in range(i, k+1):
        ways[j] += ways[j - 1] + ways[j - i]

使用从i迭代到50的for循环,我们编写了k+1,因为通过range()在循环中迭代将排除最后一种情况。在里面 方法[j]+=方法[j-1]+方法[j-i] ,我们正在用(j-1)和(j+i)第j个索引值以及第j个索引值(自 += ). 这些是j的可能值,对于i=3和k=5。 w4 最后,我们返回我们的列表 返回方式[k]–1 因此,对于i=3和k=5,这给出了解决方案(即Ans=3) w6 最后,在我们的代码中,

print("Number of black tiles =", k, "units")
print("Number of ways to fill:", E_116(2, k) + E_116(3, k) + E_116(4, k))

我们使用print()函数打印结果。第一条语句打印出来 黑色瓷砖的数量=50 第二条语句打印出来 填写方式:20492570929 这是问题的理想答案。

# Project Euler Problem 116
k = 50
def E_116(i, k):
ways = [ 1 ] * i + [ 0 ] * (k - i + 1 )
for j in range (i, k + 1 ):
ways[j] + = ways[j - 1 ] + ways[j - i]
return ways[k] - 1
print ( "Number of black tiles =" , k, "units" )
print ( "Number of ways to fill:" , E_116( 2 , k) + E_116( 3 , k) + E_116( 4 , k))


资源:

本文由 阿马蒂亚·兰扬·赛基亚 .如果你喜欢GeekSforgek,并想贡献自己的力量,你也可以使用 贡献极客。组织 或者把你的文章寄到contribute@geeksforgeeks.org.看到你的文章出现在Geeksforgeks主页上,并帮助其他极客。

如果您发现任何不正确的地方,或者您想分享有关上述主题的更多信息,请写下评论。

© 版权声明
THE END
喜欢就支持一下吧
点赞8 分享