这是我从老师那里得到的额外作业。
杯子以树状结构排列,如下所示:
1
2 3
4 5 6
填充第 1 杯需要 10 秒,然后溢出到第 2 和 3 杯中。(假设没有溢出)。由于水流被分流,杯子 2 和 3 需要 20 秒才能装满。总的来说,通过将水倒入杯子 1 来填充杯子 3,需要 30 秒。对于第 5 杯,需要 50 秒,依此类推。
这是一个表格,其中包含正确的行值和液体到达下一个杯子所需的秒数。
1(10)
2(30) 3(30)
4(70) 5(50) 6(70)
提出的问题是针对边界为 r 给定行 r 和杯子 c,那个杯子需要多长时间才能装满?
我已经为此苦苦思索了大约 24 小时,但我离解决这个问题不远了。我知道这与帕斯卡的三角形和递归有关。我还要指出,这不是一个评分作业,而只是一个老师提出的未评分的有趣问题。
编辑:
在我的笔记中添加了更易于理解的数据结构。
1: 1
2: 1 2
3: 1 2 3
鉴于这种结构,我已经根据以下公式计算出水流分配到其下方杯子的比例与帕斯卡三角形相关
h(r,c)=P(n,c)/2^(n-1)
where P(n,c) returns the number contained in the according row in Pascal's triangle
然后我用它用以下公式计算秒数:
t(r,c)=(2^(n-1)/P(n,c))*10
这对于前 3 行来说是正确的,但在那之后就分崩离析了,因为来自杯子上方 2 个杯子的水流不会同时开始。
我还尝试了一个递归函数,它可以计算其父项,它们驻留在 (r-1,c) 和 (r-1,c-1) 中并应用前面的公式,但由于我上面解释的原因,它是不正确的。
最佳答案
这个面试问题的答案在 http://www.careercup.com/question?id=9820788 和 http://www.careercup.com/question?id=22191662 给出。
它也在 http://www.geeksforgeeks.org/find-water-in-a-glass/ ,为了完整起见,这是我在评论中链接的相关 SO 质疑: Find the amount of water in ith cup in a pyramid structure? 。
关于algorithm - 找出液体到达第 n 个杯子所需的时间,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21608233/