17.只能活一个,利用Python列表特性巧妙求解约瑟夫问题(4)

2023-04-22 来源:飞速影视
图6:过程模拟
在整个过程中,我们在反复做同样的事情
把n个人排成一行。
按1,2,3报数
报到1和报到2的人,移动到队伍的末尾。
报到3的人从队伍里移除。
约瑟夫问题的Python解法
有了上面的分析过程和结论。
Python程序已经不难写了,所以先直接给出完整的代码。
people = [1,2,3,4,5,6]
num = 1
while len(people)>1:
if num == 3 :
people.pop(0)
num = 1
else :
people.append(people.pop(0))
num = num 1
print(people)
people = [1,2,3,4,5,6] ,相当于把 n = 6 个人排成一行。
num = 1, 这是一个用来计数的变量,在下面的while循环里,如果 num比3小,就加1,如果num已经数到3了,就重新变成1。
while的循环条件是 len(people) > 1,也就是说列表里元素的个数大于1个就继续循环。当然,如果想留下多个人的话,把 1改成相应的人数就可以了。
while循环里的逻辑也很简单。如果 num == 3,也即报数的数字是3,就把队伍最前面的元素从队伍里移除 people.pop(0),否则就把队伍最前面的元素移到队伍最后面,people.append(people.pop(0))。这些列表函数的用法都是上一篇刚刚介绍过的。
用列表来表示多维数组
在前面的内容里,我们在列表里放入的是单个的数字。相当于数学上的一维数列。
但是在实际的数学问题中,我们碰到更多的是2维或者多维的数组问题。
比如某次考试的成绩,是否也可以存储在列表里?

17.只能活一个,利用Python列表特性巧妙求解约瑟夫问题


相关影视
合作伙伴
本站仅为学习交流之用,所有视频和图片均来自互联网收集而来,版权归原创者所有,本网站只提供web页面服务,并不提供资源存储,也不参与录制、上传
若本站收录的节目无意侵犯了贵司版权,请发邮件(我们会在3个工作日内删除侵权内容,谢谢。)

www.fs94.org-飞速影视 粤ICP备74369512号