面试题-python3 将N(N<10000)个人排成一排,从第1个人开始报数;如果报数是M的倍数就出列

面试题

某大厂迎来了新入职的大学生,现在需要为每个新同事分配一个工号。
人力资源部同事小V设计了一个方法为每个人进行排序并分配最终的工号,具体规则是:
将N(N<10000)个人排成一排,从第1个人开始报数;如果报数是M的倍数就出列,报到队尾后则回到对头继续报, 直到所有人都出列;最后按照出列顺序为每个人依次分配工号

报数报到3的退出

100个人围一圈编号1-100,依次开始报数,
从1开始,报到3的退出,然后继续从1开始,报到3退出,直到最后只有2个人,得到编号 58, 91
从1开始,报到4的退出,然后继续从1开始,报到4退出,直到最后只有3个人,得到编号 34, 45, 97

实现效果:
输入:3
输出: 58,91
输入:4
输出: 34, 45, 97

# 作者-上海悠悠 QQ交流群:717225969
# blog地址 https://www.cnblogs.com/yoyoketang/

a = list(range(1, 101))
n = 3
while len(a) >= n:
    if n-2 >= 0:
        a = a[n:] + a[:n-1]
print(sorted(a))

跟这题非常类似,不同之处是需要收集出列的小伙伴顺序,最后几个小伙伴需继续报数,直到最后一个

先出列

假设20个人,报道5的倍数出列,于是可以得到

# 作者-上海悠悠 QQ交流群:717225969
# blog地址 https://www.cnblogs.com/yoyoketang/

a = list(range(1, 21))
new_arry = []
m = 5

# 1.人数大于等于n
while len(a) >= m:
    new_arry.append(a[m-1])
    a = a[m:] + a[:m-1]

print(a)   # 多余的
print(new_arry)

运行结果:

[2, 7, 8, 14]
[5, 10, 15, 20, 6, 12, 18, 4, 13, 1, 9, 19, 11, 3, 17, 16]

最后还有4个人将继续报数,

人数小于n的情况

[2,7,8,14]继续循环[2,7,8,14] 此时 2 出列,剩余[7,8,14]

[7,8,14]继续循环[7,8,14],此时 8 出列,剩余[7,14]
[14, 7]继续循环[14,7],此时14出列,剩余[7]
最后一个[7]可以直接取出来了

# 作者-上海悠悠 QQ交流群:717225969
# blog地址 https://www.cnblogs.com/yoyoketang/
a = list(range(1, 21))
new_arry = []
m = 5

# 1.人数大于等于n
while len(a) >= m:
    new_arry.append(a[m-1])
    a = a[m:] + a[:m-1]

print(a)   # 多余的
# 2.人数小于n
while len(a) < m:
    # 取a的整数倍余数
    m1 = m % len(a)
    if len(a) >= m1:
        new_arry.append(a[m1-1])
        a = a[m1:] + a[:m1-1]
    # 最后一个取出来
    if len(a) == 1:
        new_arry.append(a[0])
        break

print(new_arry)

运行结果

[2, 7, 8, 14]
[5, 10, 15, 20, 6, 12, 18, 4, 13, 1, 9, 19, 11, 3, 17, 16, 2, 8, 14, 7]
posted @   上海-悠悠  阅读(934)  评论(3编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示