📜  欧拉计划

📅  最后修改于: 2021-06-26 15:06:37             🧑  作者: Mango

什么是欧拉计划?
欧拉计划(Project Euler)是一系列具有挑战性的问题,需要数学和编程技巧。谁喜欢学习数学的新领域,欧拉项目将是一个有趣的旅程。

问题出在哪里?
问题就在他们的官方档案中。

让我们从存档中解决问题并了解其复杂性。我随机选择了116号问题。
问题116:红色,绿色或蓝色的瓷砖
问题陈述

解决方案:[建议您首先尝试]
红色方块的长度为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()具有两个参数i =被新的彩色(红色,绿色或蓝色)瓷砖覆盖的黑色正方形瓷砖的数量k =黑色正方形瓷砖的总数。
在函数,

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

w
因此,ways是一个列表,其中包含i长度块可以覆盖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]

使用for循环我们从i迭代至50,我们已编写的K + 1,因为在通过范围(循环迭代)将排除最后case.In方式[J] + =方式[J – 1] +方法[J – i] ,我们将使用第(j-1)个索引值和第(j + i)个索引值以及第j个索引值(自+ = )的总和来更新列表方式的第j个索引。
对于i = 3和k = 5,这些是j的可能值。
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))

资源:

  • 投影仪
  • Java解决方案_ Mathblog

如果您希望与行业专家一起参加现场课程,请参阅《 Geeks现场课程》和《 Geeks现场课程美国》。