用Python解决CodingBat制砖难题

Ben*_*shi 2 python

我正在完成 CodingBat问题:

我们要制作一排长为目标英寸的砖。我们有许多小砖(每个1英寸)和大砖(每个5英寸)。如果可以通过选择给定的砖块来达成目标,则返回True。这比看起来要难一点,并且可以完成而没有任何循环。

make_bricks(3, 1, 8) ? True
make_bricks(3, 1, 9) ? False
make_bricks(3, 2, 10) ? True
Run Code Online (Sandbox Code Playgroud)

我写:

if small + big * 5 >= goal: return True
else: return False
Run Code Online (Sandbox Code Playgroud)

我的错误是:make_bricks(3, 2, 9)False(我说真的是因为(2 * 5)+ 3 = 13大于9。

make_bricks(2, 1000000, 100003) ? False
make_bricks(1, 4, 12) ? False
Run Code Online (Sandbox Code Playgroud)

我找到了这个答案,却没有通过那些测试:

if goal > small + big * 5:
  return False
else:
  return goal % 5 <= small
Run Code Online (Sandbox Code Playgroud)

我真的不明白为什么,有人可以解释一下吗?

Has*_*aza 8

这是一个较短的解决方案。

def make_bricks(small, big, goal):
    return (goal%5)<=small and (goal-(big*5))<=small
Run Code Online (Sandbox Code Playgroud)