在python之中可以通过算法的形式去实现很多数学上的一些公式或者问题,而约瑟夫环就是一个比较经典的计算机和数学问题。而本篇文章要来介绍的内容就是python求解约瑟夫环的思路以及代码,想要深入学习python的小伙伴千万别错过了哦。

Python怎么解决约瑟夫环问题?Python如何求解约瑟夫环

一、思路

约瑟夫环之所以是数学和计算机两者共同可以求解的问题就在于它和递归实际上非常像,因为约瑟夫环的问题就是41个人排成一个圆圈,由第1个人开始报数,每报数到第3人该人就必须去掉,然后再由下一个重新报数,直到所有人都去除为止。

那么从问题之中就可以知道当结果已经确定好的时候,每隔k-2个人就要去掉第k个人。之后就是隔k-1个人就去掉第k个人,k为确定好的人数。

二、代码

约瑟夫问题最终的求解结果就是在这样一个计算公式之中,哪些位置或者说是哪些数字才不会被去除。那么实际上从公式之中可以得到一个简单的概论,那就第一次的时候第三个数会被去掉。从下一个开始就是第四个数了,再数两次就是第六个人会被去掉。

简单来说,就是每隔两个数去掉后一个数,所以最后的结果就是只会有两个数保存下来,代码示例如下:

nums = 41
call = 3
peoples = []
for _in range(nums):
    peoples.append(True)
result = []
num =1
while(any(peoples)):
    for index,people in enumerate(peoples):
        if people:
            if num == call:
                peoples[index] = False
                result.append(index+1)
                num = 1               
            else:
                num += 1
print('约瑟夫序列为:\n%s\n' % result)

以上就是关于“Python怎么解决约瑟夫环问题?Python如何求解约瑟夫环”的全部内容了,希望对你有所帮助。

更多python相关文章请访问分类:python

【版权声明】本文图文出自大盘站@dapan.cc,转载请注明出处!