寻找锄头的程序,许多孩子在分发糖果时会得到糖果,并在 Python 中维护规则

假设我们有 k 个糖果。我们必须将它们分配给儿童。现在有一些规则

  • 第 i 个孩子会得到 i^2 个糖果

  • 在索引 1 到 ii 的所有儿童都被送达之前,索引 i 的任何儿童都不会得到任何糖果

  • 如果第 i 个孩子没有得到 i^2 个糖果,那么这不是一次有效的发球。

所以,如果输入像 k = 20,那么输出将是 3 因为,第一个会得到 1,第二个会得到 2^2 = 4,第三个会得到 3^2 = 9,但第四个需要 4 ^2 = 16,但我们只剩下 6 个糖果,所以这不是一个有效的分配,所以只会给三个孩子。

示例

让我们看看以下实现以获得更好的理解 -

def solve(k):
   left = 0
   right = k
   while (right - left > 1):
      mid = (left + right) // 2
      if (mid * (mid + 1) * (2 * mid + 1) // 6 > k):
         right = mid
      else:
         left = mid
   if (right * (right + 1) * (2 * right + 1) <= k * 6):
      return right
   return left

k = 20
print(solve(k))

输入

20
输出结果
3

猜你喜欢