我正在进行一项编程挑战,你必须向分层团队分配资金。基本的想法是弄清楚,给定金额, 1.团队中最多的人数是多少? 2.你团队中最少的人数是多少?
排名最低的会员总是收到1美元,其他关键规则是:
我以为我解决了这个问题,但我的程序只通过了10个测试用例中的9个。遗憾的是,测试用例的细节对我来说是隐藏的。
所以我想弄清楚这个漏洞是在我的逻辑还是我的实现中。首先,逻辑:
这两个陈述看起来合情合理吗?
[添加代码]
听起来很像,所以现在我正在考虑这段代码可能出现的问题:
def smallest_group(total):
pile = total
men = 0
while True:
if (pile - 2 ** men) >= 0:
pile = pile - 2 ** men
men += 1
else:
# We don't have (2 ** men) money left, but
# if we have enough money to add a team member,
# the problem requires us to do so
lowest = 2 ** (men-1) + 2 ** (men-2)
if pile >= lowest:
return men + 1
else:
return men
def fib():
a,b = 1,1
yield a
yield b
while True:
a, b = b, a + b
yield b
def largest_group(total):
f = fib()
pile = total
men = 0
for man in range(100):
distribution = f.next()
if (pile - distribution) >= 0:
pile = pile - distribution
men += 1
else:
return men
详情/注意事项:
您无需分配所有资金,最后也不会遗漏任何资金。但是,在你给一个团队成员分配他们之后,如果你还有足够的钱来增加另一个成员(遵守问题中规定的条件),那么你必须这样做。
答案 0 :(得分:0)
好的,根据您未经编辑的问题,其他答案是有效的。
然而,鉴于您在评论中所陈述的内容,人们可以假设10以上的所有内容都有一些与约束条件一致的表示。因此,使用2**men
和斐波那契时,您的推理是有效的。
但是你的实现有点过时了。这些线条有点歪曲了钱会发生什么:
# We don't have (2 ** men) money left, but
# if we have enough money to add a team member,
# the problem requires us to do so
lowest = 2 ** (men-1) + 2 ** (men-2)
if pile >= lowest:
可以删除多余的部分。所以men
刚刚返回。因此,以下代码将得到答案:
def smallest_group(total):
pile = total
men = 0
while True:
if (pile - 2 ** men) >= 0:
pile = pile - 2 ** men
men += 1
else:
return men
def fib():
a,b = 1,1
yield a
yield b
while True:
a, b = b, a + b
yield b
def largest_group(total):
f = fib()
pile = total
men = 0
for man in range(100):
distribution = f.next()
if (pile - distribution) >= 0:
pile = pile - distribution
men += 1
else:
return men
具有讽刺意味的是,你的代码比它需要的更复杂。
答案 1 :(得分:-1)
更改smallest_group函数会传递所有测试用例:
def smallest_group(total):
pile = total
men = 0
while True:
if (pile - 2 ** men) >= 0:
pile = pile - 2 ** men
men += 1
else:
lowest = 2 ** (men-1) + 2 ** (men-2)
if pile >= lowest:
return men
# return men + 1
else:
return men
这对我来说似乎不对,因为我确信至少有一些情况下你可以添加一个团队成员,即使你不能按照2 **男人的规则付钱给他。所以我不确定该提交什么作为我对挑战的“回答”。