小练习题(69)有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位
程序员文章站
2022-04-16 16:25:54
有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位移除报数为3的人,剩下的人继续报数,此时需要把前面已经报过数的人移到末尾,然后再从头报数,这样就满足了顺序要求。也就是删除一个报数为3的人,就要通过move()移动一次#轮转交换函数,def move(m,arr,n): arr_new = [0]*n for j in range(n): arr_new[(j+m)%n] = arr[j] ret...
有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位
移除报数为3的人,剩下的人继续报数,此时需要把前面已经报过数的人移到末尾,然后再从头报数,这样就满足了顺序要求。也就是删除一个报数为3的人,就要通过move()移动一次
#轮转交换函数,
def move(m,arr,n):
arr_new = [0]*n
for j in range(n):
arr_new[(j+m)%n] = arr[j]
return arr_new
#循环删除3的倍数成员
def dele(p):
while len(p)>2:
#移除报数为3的人,剩下的人继续报数,此时需要把前面已经报过数的人移到末尾,
#然后从头报数,也就是删除一个人就要通过move函数移动一次
p.remove(p[2])
p = move(len(p)-2,p,len(p))
if len(p) == 2:
print(p[1])
break
if __name__ == '__main__':
#把每个人的编号作为列表元素 ,列表为p
person = int(input("请输入总人数:"))
p = []
for i in range(0, person):
p.append(i + 1)
print(p)
#淘汰报数为3的函数
dele(p)
运行结果:
总人数为10 的时候,最后一个剩余的人为原先的4号
本文地址:https://blog.csdn.net/qq_41761265/article/details/107646887
推荐阅读
-
【学习笔记】C语言习题:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。
-
小练习题(69)有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位
-
约瑟夫环问题:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。
-
有n个人围成一圈,顺序排号。从第1个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下来的是原来第几号的那位
-
每日一题· 有10个队员围成一圈,顺序排号,从第一个开始报数(从1到3报数), 凡报到3的人退出圈子,编程实现最后留下的是原来第几号队员?
-
有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡是报到3的人退出圈子,问最后留下来的是原来的第几位(指针方法处理)。
-
有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数), 凡报到3的人退出圈子,问最后留下的是原来第几号的那位。(*)
-
n个小孩围成一圈,顺序报号,从第一个人开始报数(从1报到5),凡是报到5的人退出圈子,问最后留下的小孩原来是几号
-
【学习笔记】C语言习题:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。
-
小练习题(69)有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位