我在SingPath上做这个问题 -
我们想制作一排长度恰好为目标英寸的砖块。我们有许多小砖(每块1英寸)和大砖(每块5英寸)。如果可以通过从给定的砖块中选择来实现目标,则返回True。这比它看起来有点困难,可以在没有任何循环的情况下完成。
所以,我写了这个简单的代码,它适用于所有条件,但除了一个 -
def make_bricks(small,big,goal):
if (small + big * 5) >= goal:
return True
else:
return False
它不适用于这种情况 - make_bricks(2, 4, 13)
我的代码返回True
,但预期输出为False
。
哪个有意义,但不确定如何将其转换为代码。
答案 0 :(得分:11)
你的计算错了;你需要看看一些的大小砖是否可以用于所需的行;你只是在确定给出的砖块是否能产生至少的行
。你不能建造一排长13,因为你没有足够的小砖;用两块大砖你需要另外三块小砖。
你需要看看你需要多少5块大小的砖块,然后用小砖块加上剩余的砖块。考虑到1块大砖和8块小砖同样可以用作2块大砖和3块小砖!
首先计算需要多少大砖块,但如果你的理想用量少于你想要的大砖块的实际价值,那么看看是否可以用小砖块处理剩下的目标:
def make_bricks(small, big, goal):
big_bricks = min(goal // 5, big)
remainder = goal - (big_bricks * 5)
return remainder <= small
//
是整数除法,13 // 5
是2
,因此您最多使用2个大块。其余部分为3
,但您只有两块小砖,结果为False
:
>>> make_bricks(2, 4, 13)
False
>>> make_bricks(3, 4, 13)
True
>>> make_bricks(8, 1, 13)
True