【发布时间】:2024-11-28 22:30:02
【问题描述】:
我正在尝试完成编码挑战以提高我的编程技能,或者说缺乏它。挑战详情在这里。
在一个房间里有 N 根绳索和 N 个重物。每根绳子都连接到 正好有一个重量(只有一端),每根绳子都有一个特定的重量 耐久性 - 它可以暂停的最大重量。还有一个 挂钩,固定在天花板上。绳索可以连接到钩子上 通过在没有重量的情况下捆绑末端。绳索也可以固定在 其他重量;也就是说,绳索和重物可以连接到一个 链中的另一个。如果重量的总和相连,绳子就会断裂 对它来说,直接或间接地,大于它的持久性。
我们知道要连接 N 根绳索的顺序。更确切地说, 我们知道绳索的参数(耐用性和重量)和 每个附件的位置。耐久性、重量和位置是 在长度为 N 的三个零索引数组 A、B、C 中给出。对于每个 I (0 ≤ I
A= [4,3,1] B = [2,2,1] C = [-1,0,1]函数应该返回 2,就好像我们连接第三根绳子然后一根绳子会断裂,因为权重的总和大于它的 耐久性(2 + 2 + 1 = 5 和 5 > 4)。
下面是我尝试的解决方案。我有一个名为 add_weights 的辅助函数,如果添加最新的绳子不会导致任何其他绳子断裂,则返回 True,否则返回 false。
def add_weights(A, ancestors, weights, weight, rope):
#add weight(int) to rope and ancestors
if (rope == -1):
return (True)
else:
weights[rope] += weight
if (A[rope] < weights[rope]):
print "Rope that breaks", rope
return False
ancestor = ancestors[rope]
print ancestor
add_weights(A, ancestors, weights, weight, ancestor)
def solution(A, B, C):
# write your code in Python 2.7
weights = {}
ancestors = {}
for i in range(len(B)):
weights[i] = B[i]
for i in range(len(C)):
#attaching rope i to rope x
x = C[i]
ancestors[i] = x
broke = add_weights(A, ancestors, weights, B[i], x)
if (not broke):
return i
return len(C)
问题是在函数解决方案中 for 循环的第二次迭代期间(当我尝试添加绳索 1 时),当我可以清楚地看到 add_weights 返回 True 时,变量 break 以某种方式计算为 None。我也用调试器对其进行了测试,所以我不完全确定发生了什么。欢迎任何帮助。
【问题讨论】:
-
请想出一个更好的问题标题;你现在的那个没有告诉我们你的问题。对我们而言,您的问题源自何处并不重要。
-
add_weights在基本情况下只有一个return- 将最后一行设为return add_weights(...)。 -
我还是想知道为什么在他们的例子中答案是 2。