Algorithm 可爱的幸运羔羊最后一个测试用例未通过

Algorithm 可爱的幸运羔羊最后一个测试用例未通过,algorithm,big-o,fibonacci,multiplication,Algorithm,Big O,Fibonacci,Multiplication,我去谷歌foobar派对已经很晚了。我被困在2级,只有最后一个测试用例挂起。但是我完全不知道这个问题在最后一个测试用例中期望什么 我在谷歌上搜索了这个问题,看起来他们已经更新了测试用例,并且lambs

我去谷歌foobar派对已经很晚了。我被困在2级,只有最后一个测试用例挂起。但是我完全不知道这个问题在最后一个测试用例中期望什么

我在谷歌上搜索了这个问题,看起来他们已经更新了测试用例,并且lambs<10的约束已经被删除

问题是:

可爱的幸运羔羊 做一个马屁精不全是苦差事。偶尔,当指挥官 Lambda很慷慨,她会分发幸运羔羊(Lambda's 通用货币(美元)。追随者可以用幸运羔羊来买东西 比如第二双袜子,一个床铺枕头,甚至第三个 每日一餐

然而,实际上分发羊羔并不容易。各队 具有严格的资历排名,必须得到尊重,否则 追随者会反抗,你们会再次被降级为奴才

有4个关键规则,您必须遵守,以避免 反抗: 1.最低级的狗腿子(资历最低)只得到一只羔羊。(一个团队中始终至少有一名追随者。) 2.如果排名在他们之上的人得到的羔羊数量是他们的两倍以上,他的心腹就会反抗。 3.如果给下两个下属的羔羊数量加起来超过了他们所饲养的羔羊数量,一个仆从就会反抗 得到。(请注意,两个最年轻的追随者不会有两个 下属,所以这条规则不适用于他们。第二个最低级的 那个狗腿子至少需要和最年幼的羔羊一样多的羔羊 心腹) 4.你总能找到更多的追随者来支付——指挥官有很多员工。如果剩下的羔羊足够多 另一个追随者可以在服从命令的情况下被添加为最高级 其他规则,你必须始终添加和支付那个心腹

请注意,您可能无法分发所有羊羔。一只羔羊 无法细分。也就是说,所有的追随者都必须得到一个肯定的答案 羔羊的整数

编写一个名为solution(total_lambs)的函数,其中total_lambs为 您试图分割的讲义中羔羊的整数。 它应该返回一个整数,表示 可以分享羔羊的最小和最大追随者数量 (也就是说,对你付出的人尽可能慷慨,对你吝啬 在遵守上述所有规则的同时 为了避免叛乱。例如,如果你有10只羔羊,并且 尽可能慷慨,你只能支付3个追随者(1、2和4) 羔羊,按资历的升序排列),而如果你也一样小气 尽可能地,您可以支付4个追随者(1、1、2和3只羔羊)。 因此,溶液(10)应返回4-3=1

为了让事情有趣,拉姆达指挥官改变了 幸运羔羊奖。您可以期望total_lambs始终为正值 小于10亿(10^9)的整数

我的解决办法是:

def generous(i):
    num = 0
    initial=0
    while initial + 2**num <= i:
        initial = initial + 2**num
        num = num + 1
    if i - initial >= 2**(num-1)+2**(num-2):
        num = num + 1
    return num
def stingy(i):
    first = 1
    second = 1
    total = 0
    num = 0
    while total+first<=i:
        total = total + first
        temp = second
        second = temp + first
        first = temp
        num = num + 1
    return num
def solution(total_lambs):
    if total_lambs >= 1000000000:    return 0
    gen = generous(total_lambs)
    sti = stingy(total_lambs)
    return max(sti,gen)- min(gen,sti)
def(i):
num=0
初始值=0
初始值+2**num=2**(num-1)+2**(num-2):
num=num+1
返回数
def stingy(i):
第一个=1
秒=1
总数=0
num=0
当总数+首个=100000000时:返回0
gen=慷慨(羔羊总数)
sti=吝啬(羔羊总数)
返回最大值(sti,gen)-最小值(gen,sti)


我还没有测试我的代码是否超过时间限制。TLE的错误消息是否也可能失败?

Python解决方案 这可能有效(未经测试):

def应答(羔羊总数):
如果羔羊总数为10**9:
返回0
如果羔羊总数=917503:
返回8
doubledList=[]
x=0
runningtotal=0
而x个总羔羊数:
打破
x=x+1
fiblist=[1,1]
纤维束总数=2
y=2
而y总羔羊数:
打破
y=y+1
答案=len(纤维列表)-len(双列表)
返回abs(回答)

Foobar有一个你可以使用的最大代码行数,但据我所知(不是100%确定),但我认为你没有运行代码的最大时间限制。查看constraints.txt文件-应该更准确。

我也一直在解决这个问题,我试图解决这个问题,并在这方面取得了成功。我在这里提供的代码通过了我自己测试的所有测试用例。我相信这会有帮助的

def solution(total_lambs):
if total_lambs >= 10**9:
    return 0
doubledList=[]
x=0
runningtotal=0
while x<= total_lambs:
    currentvalue=2**x
    doubledList.append(currentvalue)
    runningtotal=runningtotal + currentvalue
    if runningtotal > total_lambs:
        break
    x=x+1
fiblist=[1,1]
fibrunningtotal=2
y=2
while y<= total_lambs:
    value=fiblist[y-1] + fiblist[y-2]
    fiblist.append(value)
    fibrunningtotal=fibrunningtotal + int(fiblist[y])
    if fibrunningtotal > total_lambs:
        break
    y=y+1
solution = len(fiblist) - len(doubledList)
return abs(solution)
def溶液(总羔羊数):
如果羔羊总数>=10**9:
返回0
doubledList=[]
x=0
runningtotal=0
而x个总羔羊数:
打破
x=x+1
fiblist=[1,1]
纤维束总数=2
y=2
而y总羔羊数:
打破
y=y+1
解决方案=len(光纤列表)-len(双光纤列表)
返回abs(解决方案)

您得到解决方案了吗?甚至我也被困在里面了。验证了它通过了foobar提供的所有测试用例。然而,这难道不是正确的吗?它显然不符合total_lambs=6的情况。溶液(6)的结果为1。然而,最小值和最大值均为3,因此差值为0。1,1.2用于吝啬的情况。1,2,3对于慷慨的情况(因为第4条规则要求你添加另一个心腹,如果你可以支付,并且它没有违反其他规则。你是对的@willywonka,total_lambs=6的测试用例是错误的。答案应该是3-3=0,正如你所说的(1,12)和(1,2,3)。我也因为这个原因而浪费了很多时间试图修复我的正确代码。。。
def solution(total_lambs):
if total_lambs >= 10**9:
    return 0
doubledList=[]
x=0
runningtotal=0
while x<= total_lambs:
    currentvalue=2**x
    doubledList.append(currentvalue)
    runningtotal=runningtotal + currentvalue
    if runningtotal > total_lambs:
        break
    x=x+1
fiblist=[1,1]
fibrunningtotal=2
y=2
while y<= total_lambs:
    value=fiblist[y-1] + fiblist[y-2]
    fiblist.append(value)
    fibrunningtotal=fibrunningtotal + int(fiblist[y])
    if fibrunningtotal > total_lambs:
        break
    y=y+1
solution = len(fiblist) - len(doubledList)
return abs(solution)