程序查找在Python中收到最后一个气球的孩子的开始索引?

假设我们有n个孩子围成一圈站着,他们在等着气球。分配从第k个孩子开始(首先在索引0处进行),然后给他们一个气球,他们离开了圈子。现在,每个第k个孩子都会获得一个气球,顺时针方向旋转,直到只剩下一个孩子获得气球为止。因此,如果我们有n和k,我们必须找到接收最后一个气球的孩子的起始索引。

因此,如果输入类似于n = 3 k = 2,则输出将为1,在第一个回合中,孩子2得到一个气球,然后离开,因此圆圈将为[0,1]。在第二轮中,孩子0得到一个气球,圆圈将为[1]。

为了解决这个问题,我们将按照以下步骤操作:

  • arr:=范围从0到n的新列表

  • 初始化:= 0

  • 当arr的大小> 1时,执行

    • 删除:=(init + k)mod的arr大小

    • 删除arr [删除]

    • 初始化:=删除

  • 返回arr [0]

让我们看下面的实现以更好地理解:

示例

class Solution:
   def solve(self, n, k):
      arr = list(range(0, n))
      init = 0
      while len(arr) > 1:
         remove = (init + k) % len(arr)
         del arr[remove]
         init = remove
      return arr[0]

ob = Solution()n = 3
k = 2
print(ob.solve(n, k))

输入项

3,2

输出结果

1
猜你喜欢