当前位置:   article > 正文

约瑟夫环问题(基督教徒问题)python_个人在一条船上,超载,需要 15 人下船。于是人们排成一队,排队的位置即为他们

个人在一条船上,超载,需要 15 人下船。于是人们排成一队,排队的位置即为他们

python解决约瑟夫环问题

问题描述:

1、30 个人在一条船上,超载,需要 15 人下船。于是人们排成一队,排队的位置即为他们的编号。报数,从 1 开始,数到 9 的人下船。如此循环,直到船上仅剩 15 人为止。问都有哪些编号的人下船了呢?

2、有15个基督徒和15个非基督徒在海上遇险,为了能让一部分人活下来不得不将其中15个人扔到海里面去,有个人想了个办法就是大家围成一个圈,由某个人开始从1报数,报到9的人就扔到海里面,他后面的人接着从1开始报数,报到9的人继续扔到海里面,直到扔掉15个人。由于上帝的保佑,15个基督徒都幸免于难,问这些人最开始是怎么站的,哪些位置是基督徒哪些位置是非基督徒。

#方式一:
def dieorlive(n):
    """
    :param n: 人数
    :return:
    """
    if n < 9:
        print("输入大于9,请重新输入!")
    check = 0
    lis = [1 for i in range(n + 1)]
    i = 1
    j = 0
    while i <= n + 1:
        if i == n + 1:
            i = 1
        elif j == n // 2:
            break
        else:
            if lis[i] == 0:
                i += 1
                continue
            else:
                check += 1
                if check == 9:
                    lis[i] = 0
                    check = 0
                    print("{}号下船了".format(i))
                    j += 1
                else:
                    i += 1
                    continue
#方式二:
def dieorlive():
    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='')
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/434883
推荐阅读
相关标签
  

闽ICP备14008679号