Python编程:查找最后一个接收气球的孩子的起始索引?
假设有n个孩子站成一个圆圈,他们在等待气球。从第k个孩子(在索引0处)开始分发气球,当他们离开圆圈时,给他们一个气球。现在,每个第k个孩子都按顺时针方向得到一个气球,直到只剩一个孩子得到气球为止。因此,如果我们有n和k,我们必须找到接收最后一个气球的孩子的起始索引。
因此,如果输入为n=3,k=2,则输出将为1。在第一轮中,孩子2得到了一个气球并离开了,所以圆圈将是[0,1]。在第二轮中,孩子0得到了一个气球,圆圈变成[1]。
为了解决这个问题,我们将按照以下步骤进行:
- arr := 新列表,范围为0到n
-
init := 0
-
当arr的大小> 1时执行以下操作
- remove := (init + k) % arr大小
-
删除arr [remove]
-
init := remove
-
返回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