在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,转载请注明出处!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。