Python编程创造营之约瑟夫环任务小结
实验任务来自于Python中的“公式”实验指导手册第10页。问题描述如下:
定义函数解决约瑟夫环问题:一群小朋友(数量为 n)围坐一圈,从第 k 个(默认 k=0)小朋友开始数数,从 1 开始数到 m(默认为 3),数字为 m 的小朋友退出,然后下面的小朋友继续从 1 开始数,当一圈数完以后,第一个小朋友接着最后一个小朋友的数字继续,一直到只剩下一个小朋友,请问最后一个留下的是开始编号为多少的小朋友?
笔者使用华为ModelArts平台求解了约瑟夫环问题,ModelArts平台截图如下:
结合平台截图,分析其关键代码如下。
设计函数Yuesefu, 含有三个变量,n表示参与游戏的总人数,m代表小朋友报的数字(默认为3),k代表游戏开始报数的编号为k的小朋友(默认为0)。
使用Python设计语言,使用列表表示圆圈环的小朋友编号。
灵活使用list.pop和list.append函数,结合while循环,把第一个报数的小朋友弹出圆圈队伍,并排入到队伍的最后,从而形成一个可以循环报数的圆圈队伍。
当小朋友报的数字为程序要求的m时,此视该小朋友彻底退出圆环队伍,通过continue进入下一轮游戏报数, 不再参与队伍的后续排队。
当队伍中只留有一个小朋友时,退出游戏while循环,显示该小朋友的编号,游戏结束。
当指定从编号K(k不是0)的小朋友开启游戏报数,则在游戏循环开始前,则先整理游戏队伍,把指定编号的小朋友放置在圆圈队伍的首位,然后再开始游戏。
综上所述,Yuesefu函数就是响应实验指导手册所要求设计的求解约瑟夫环问题的函数。
思考展望:这是一个很有趣的求解问题,笔者使用了Python的列表循环求解,再次体现了Python的简洁与美,如果采用C语言的话,或许在设计最初的循环链表结构时,就要花费不少代码量了。或许真的应了那句话:“人生苦短,我用Python”~
- 点赞
- 收藏
- 关注作者
评论(0)