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)
相关推荐
imLix1 分钟前
RunLoop 实现原理
前端·ios
微小的xx6 分钟前
java + html 图片点击文字验证码
java·python·html
wayman_he_何大民7 分钟前
初始机器学习算法 - 关联分析
前端·人工智能
飞飞飞仔10 分钟前
别再瞎写提示词了!这份Claude Code优化指南让你效率提升10倍
前端·claude
刘永胜是我11 分钟前
node版本切换
前端·node.js
成小白15 分钟前
前端实现表格下拉框筛选和表头回显和删除
前端
wayman_he_何大民16 分钟前
初始机器学习算法 - 聚类分析
前端·人工智能
金色旭光16 分钟前
uv 现代化的虚拟环境管理工具
python·python进阶
CHANG_THE_WORLD16 分钟前
# C++ 中的 `string_view` 和 `span`:现代安全视图指南
开发语言·c++
wycode17 分钟前
Vue2实践(3)之用component做一个动态表单(二)
前端·javascript·vue.js