首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >项目2人类金字塔计算

项目2人类金字塔计算
EN

Stack Overflow用户
提问于 2019-09-18 06:12:02
回答 2查看 1.7K关注 0票数 0

为了简单起见,我们假设金字塔中的每个人都恰好有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权重应该是浮点数。

我已经试过很多次了。我将在下面包含我的最新代码。

代码语言:javascript
复制
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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-09-18 06:44:20

使用全局变量表明您没有以递归方式考虑这一点。

每个人的肩膀重量是每个肩膀上的人的一半。每个人的有效体重是他们所承担的重量加上200磅。如果一个人在边缘,那么另一个肩膀上的“人”的重量为0。

所以..。

代码语言:javascript
复制
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 +的例程。

这就是你的大纲;你能从那里开始吗?

票数 1
EN

Stack Overflow用户

发布于 2020-09-24 06:23:38

代码语言:javascript
复制
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))/2
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57982663

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档