Python 约瑟夫环问题

据说著名历史学家 Josephus有过以下的故事:Josephus及他的朋友共41人围成一个圆圈,由第1个人开始报数,每数到3该人就必须出去,然后再由下一个人重新报数,直到圆圈上少于3人为止。Josephus 将朋友与自己安排在第16个与第31个位置,成为最后剩下的人。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

扩展这个问题,当人数为n,每次报数为k时,求解最后的K-1个剩下的人的位置

输入格式‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

在同一行内输入两个正整数n和k,要求k > = 2且n >= k

输出格式‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

以列表形式显示剩余的人的序号。 如果k<2或者n<k,打印Data Error!

代码实现

python 复制代码
n,k = map(int,input().split(' '))
person = [i for i in range(1,n + 1)]

s = 0
if k < 2 or n <k:
    print('Data Error!')
else:
    while len(person) >= k:
        i = 0
        while i < len(person):
            s += 1   # 报数
            if s == k:
                del person[i] # 出圈
                s = 0     # 初始化
            else:
                i += 1    # 如果没出圈,就到下一个人
    print(person)
相关推荐
a程序小傲几秒前
京东Java面试被问:ZGC的染色指针如何实现?内存屏障如何处理?
java·后端·python·面试
精神小伙就是猛2 分钟前
C# sealed密封 追本溯源
开发语言·c#
真正的醒悟13 分钟前
图解网络35
开发语言·网络·php
大连好光景25 分钟前
批量匿名数据重识别(debug记录)
开发语言·python
计算机毕设VX:Fegn089525 分钟前
计算机毕业设计|基于Java + vue水果商城系统(源码+数据库+文档)
java·开发语言·数据库·vue.js·spring boot·课程设计
周杰伦_Jay26 分钟前
【 Vue前端技术详细解析】目录结构与数据传递
前端·javascript·vue.js
暴风鱼划水30 分钟前
算法题(Python)哈希表 | 2.两个数组的交集
python·算法·哈希表
清水白石00832 分钟前
《深入 Celery:用 Python 构建高可用任务队列的实战指南》
开发语言·python
Tony Bai36 分钟前
Jepsen 报告震动 Go 社区:NATS JetStream 会丢失已确认写入
开发语言·后端·golang
无敌最俊朗@39 分钟前
STL-list面试剖析(面试复习4)
开发语言