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)
相关推荐
MinterFusion2 分钟前
如何在openKylin 2.0 SP2中安装Qt(v0.2.2)(上)
开发语言·qt·软件开发·系统维护·明德融创·openkylin
zhuhezhang4 分钟前
一个用python开发的文本对比工具
python·文本对比工具
绝世唐门三哥5 分钟前
OpenClaw 安装 + 手动配置 DeepSeek 模型(2026.4.5 版)
前端·oepn claw
智算菩萨5 分钟前
【Python图像处理】5 Pillow图像处理与格式转换
图像处理·python·pillow
来一颗砂糖橘7 分钟前
吃透 ES6 扩展运算符(...):从表面语法到底层逻辑,避开所有坑
前端·javascript·es6·扩展运算符·前端进阶
前端小D11 分钟前
JS模块化
开发语言·前端·javascript
无限码力12 分钟前
华为OD技术面真题 - JAVA开发- spring框架 - 7
java·开发语言·华为od·华为od面试真题·华为odjava八股文·华为odjava开发题目·华为odjava开发高频题目
人工干智能14 分钟前
科普:%%matplotlib inline:魔法命令 (Cell Magic)
python·matplotlib
05大叔16 分钟前
优化器Adam,神经网络处理文本,CNN,RNN
开发语言·python·机器学习
Lyyaoo.18 分钟前
【JAVA基础面经】JAVA中的异常
java·开发语言