• 【Python】约瑟夫环问题


    任务描述

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

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

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

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

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

    以列表形式显示剩余的人的序号。 如果k<2或者nData Error!

    示例 1‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

    输入: 41 3

    输出:
    [16, 31]

    ‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

    1. def f(n, k):
    2. ls_n = list(range(1, n+1))
    3. while len(ls_n) > k-1:
    4. ls_n = ls_n[k:] + ls_n[:k-1]
    5. return ls_n
    6. n, k = map(int,input().split(" "))
    7. if k < 2 or n < k:
    8. print("Data Error!")
    9. else:
    10. print(f(n, k))
  • 相关阅读:
    【数字IC基础】数字IC设计中各种工具介绍
    Java-算法-动态规划-附一
    转守为攻,亚马逊云换帅背后的战略转向
    learning vim
    Java面试题:细数ThreadLocal大坑,内存泄露本可避免
    springboot+影院售票小程序 毕业设计-附源码111154
    《Go Web 编程》之第1章 Go与Web应用
    echarts图 横向滚动条
    JNPF3.4.5大版本正式上线啦!
    利用XXXXXXXXMIND管理。
  • 原文地址:https://blog.csdn.net/CuberW/article/details/136458863