为了简单起见,我们假设金字塔中的每个人都恰好有200磅。金字塔顶端的人A的背部没有重量。人B和C的重量是人A的一半。这意味着他们每个人都有100磅的重量。现在,让我们看看第三排的人。让我们从关注人物E开始,她支撑了多少重量?她的体重是B的一半(100磅)和E的一半(100磅),所以她至少支持200磅。最重要的是,她感受到了人们B和C的一些负担。B承担的一半重量(50磅)传递给E,C承担的一半重量(50磅)同样传递给E,所以E最终感觉多了100磅。这意味着她总共支持了300磅。
编写一个递归函数(不使用循环) weightOn(r,c),它返回r行和c列中人员背部的权重。行和列是从0开始的,因此顶部位置是(0,0),而人员H是位置(3,1)。下面也成立: weightOn(0,0) == 0.00 weightOn(3,1) == 425.00权重应该是浮点数。
我已经试过很多次了。我将在下面包含我的最新代码。
t = 0.0
x = 0.0
def weightOn(r, c):
global t
if r < 0:
print('Not valid')
elif r == 0 and c == 0:
return t
elif r > 0 and c == 0:
t += 200 / (2 ** r)
return weightOn(r - 1, 0)
elif r > 0 and c == r:
t += 200 / (2 ** r)
return weightOn(r - 1, 0)
elif r > c > 0:
mid(r, c)
return t
def mid(r, c):
global x
x = weightOn(r - 1, c - 1) + weightOn(r - 1, c)
'''I have also tried: x = (((weightOn(r - 1, c - 1) + 200) / 2) + ((weightOn(r - 1, c) + 200) / 2))'''
return x
r = int(input('r: '))
c = int(input('c: '))
weightOn(r, c)
if r > c > 0:
print(x)
else:
print(t)它总是带来错误的输出。我可以正确地拉起所有的边(当c == 0或c == r时)。但除此之外,它不会起作用。
例如。输入(3,1)输出500 (3,2)输出550
发布于 2019-09-18 06:44:20
使用全局变量表明您没有以递归方式考虑这一点。
每个人的肩膀重量是每个肩膀上的人的一半。每个人的有效体重是他们所承担的重量加上200磅。如果一个人在边缘,那么另一个肩膀上的“人”的重量为0。
所以..。
def weight(r, c):
# Code base cases
if r < 0: # Past the pyramid top; no such person
return 0
if c < 0 or c > r: # Off the edge; no such person
return 0
return 200 + (weight(r - 1, c - 1) + weight(r - 1, c)) / 2那么weightOn就是上面没有200 +的例程。
这就是你的大纲;你能从那里开始吗?
发布于 2020-09-24 06:23:38
def weight_on (r,c):
second_person = 200 #finds out if there is a second person on top or not
if c - 1 < 0 or c > r - 1 :
second_person = 0
if c < 0 or c > r:
return 0
elif r <= 0:
return 0
else:
return (second_person + 200 + weight_on (r - 1,c - 1) + weight_on (r - 1,c))/2https://stackoverflow.com/questions/57982663
复制相似问题