【发布时间】:2017-06-17 07:35:31
【问题描述】:
我是 python 新手,我正在尝试解决这个优化问题:
In How many possible ways can I receive 42 emails in 7 days?
我用 Python 编写了这个程序来计算所有解决方案:
n = 42
print(n, "emails can be received in the following ways:")
solcount = 0
for d1 in range (n+1):
for d2 in range (n+1-d1):
for d3 in range (n+1-d1-d2):
for d4 in range (n+1-d1-d2-d3):
for d5 in range (n+1-d1-d2-d3-d4):
for d6 in range (n+1-d1-d2-d3-d4-d5):
for d7 in range (n+1-d1-d2-d3-d4-d5-d6):
if d1+d2+d3+d4+d5+d6+d7 == n:
solcount +=1
print("There are", solcount, "possible solutions")
其中 d1 到 d7 分别是第 1 天到第 7 天收到的电子邮件数量。
现在,这有两个问题:
- 运行时间高的离谱,我怀疑这个算法 远非最佳。
- 代码不允许我改变天数(就像我将天数固定为变量k)。
如何简化?
谢谢!
【问题讨论】:
-
答案不就是42选7吗? 26978328?
-
数学表达式是否足够,或者您真的想要代码来计算数字? (确实存在一个简单的表达式。)
-
现有方法的微小优化:
d7没有循环,因为d7 = n - d1 - d2 - ... - d6。无需实际评估,只需solcount += 1。
标签: python python-3.x discrete-mathematics knapsack-problem