什么是欧拉计划? 欧拉计划是一系列具有挑战性的问题,需要数学和编程技能。作为一个喜欢学习数学新领域的人,欧拉计划将是一次有趣的旅程。
问题在哪里? 问题就在他们的官方文件中 档案文件 .
让我们从存档中解决一个问题,并了解其复杂性。我随机选择了第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() 有两个参数 我 =新彩色(红色、绿色或蓝色)瓷砖覆盖的黑色方形瓷砖数量,以及 K =黑色方形瓷砖的总数。 在函数中,
ways = [1] * i + [0] * (k-i+1)
因此,ways是一个列表,其中包含了i-length块可以覆盖50块黑色方形瓷砖的方式总数。例如:
在上面的示例中,x=[1,1,1,0,0,0]有1(x3)和0(x3),其中1表示可能的解决方案情况,0表示失败。正如我们可以从问题中比较i=3和k=5,我们总共得到了3种可能的方法。因此,列表中有1(x3)种方式。
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。 最后,我们返回我们的列表 返回方式[k]–1 因此,对于i=3和k=5,这给出了解决方案(即Ans=3)
最后,在我们的代码中,
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主页上,并帮助其他极客。
如果您发现任何不正确的地方,或者您想分享有关上述主题的更多信息,请写下评论。