字符串和常用的数据结构之约瑟夫环问题

约瑟夫环问题

“”"
有15个基督徒和15个非基督徒,
大家围成圈,
由某个人开始从1报数,报到9的人扔到海里面;
他后面的人接着从1开始报数,报到9的人扔到海里面,直到扔掉15个人
最后15个基督徒都幸免于难,为啥
“”"


def main():
  persons = [True] * 30
  counter, index, number = 0, 0, 0
  while counter < 15:
    if persons[index]:
      number += 1
      if number == 9:
          persons[index] = False
          counter += 1
          number = 0
    index += 1
    index %= 30
  for person in persons:
   print('基' if person else '非', end='||')

if __name__ == '__main__':
  main()

在这里插入图片描述

找出座位号

def main(n, k):
    # n代表总人数,k代表报数的数字
    List = list(range(1, n + 1))
    index = 0
    while List:
        temp = List.pop(0)
        index += 1
        if index == k:
            index = 0
            continue
        List.append(temp)
        if len(List) == 15:
            List.sort()
            print(List)
            break


if __name__ == '__main__':
    main(30, 9)

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值