本帖最后由 天黑我隐身 于 2020-2-1 20:46 编辑
贴的代码真的难看,自己能看明白就算了,如果贴给别人,麻烦还是先看看PEP8规范吧
追求代码行数前面的朋友都说了,我就不重复了
我就这个题目提供一种递归思路解法
[Python] 纯文本查看 复制代码 def func(cur_id, tar_id, l):
"""递归法
口号从自然数1开始,与数组索引有差异
:param cur_id: 当前口号
:param tar_id: 要删除的口号
:param l: 目标数组
:return:
"""
if len(l) == 1:
print('剩余:', l[0])
return
# 数组大小小于删除口号时会涉及循环口号
# 最终目标口号 = 删除口号除以数组长度取余
if len(l) < tar_id:
# 如果余数=0 由于下面递归逻辑都是从1开始 因此必须特殊处理
# 因为索引 [-1]和[len(l)-1]等价 所以直接取target = len(l)
target = (tar_id % len(l)) or len(l)
else:
target = tar_id
if cur_id == target:
print('删除:', l[cur_id - 1])
return func(1, tar_id, l[cur_id:] + l[:cur_id - 1])
else:
return func(cur_id + 1, tar_id, l)
n, m = (6, 4)
a = [i for i in range(1, n + 1)]
func(1, m, a) |