Python编程创造营之约瑟夫环任务小结

举报
爱学习的多宝 发表于 2021/04/04 10:40:19 2021/04/04
【摘要】 实验任务来自于Python中的“公式”实验指导手册第10页。问题描述如下:定义函数解决约瑟夫环问题:一群小朋友(数量为 n)围坐一圈,从第 k 个(默认 k=0)小朋友开始数数,从 1 开始数到 m(默认为 3),数字为 m 的小朋友退出,然后下面的小朋友继续从 1 开始数,当一圈数完以后,第一个小朋友接着最后一个小朋友的数字继续,一直到只剩下一个小朋友,请问最后一个留下的是开始编号为多少的...

实验任务来自于Python中的“公式”实验指导手册第10页。问题描述如下:

定义函数解决约瑟夫环问题:一群小朋友(数量为 n)围坐一圈,从第 k 个(默认 k=0)小朋友开始数数,从 1 开始数到 m(默认为 3),数字为 m 的小朋友退出,然后下面的小朋友继续从 1 开始数,当一圈数完以后,第一个小朋友接着最后一个小朋友的数字继续,一直到只剩下一个小朋友,请问最后一个留下的是开始编号为多少的小朋友? 

笔者使用华为ModelArts平台求解了约瑟夫环问题,ModelArts平台截图如下:

约瑟夫求解截图.JPG

结合平台截图,分析其关键代码如下。

   设计函数Yuesefu, 含有三个变量,n表示参与游戏的总人数,m代表小朋友报的数字(默认为3),k代表游戏开始报数的编号为k的小朋友(默认为0)。

   使用Python设计语言,使用列表表示圆圈环的小朋友编号。

   灵活使用list.pop和list.append函数,结合while循环,把第一个报数的小朋友弹出圆圈队伍,并排入到队伍的最后,从而形成一个可以循环报数的圆圈队伍。

    当小朋友报的数字为程序要求的m时,此视该小朋友彻底退出圆环队伍,通过continue进入下一轮游戏报数, 不再参与队伍的后续排队。

    当队伍中只留有一个小朋友时,退出游戏while循环,显示该小朋友的编号,游戏结束。

    当指定从编号K(k不是0)的小朋友开启游戏报数,则在游戏循环开始前,则先整理游戏队伍,把指定编号的小朋友放置在圆圈队伍的首位,然后再开始游戏。

    综上所述,Yuesefu函数就是响应实验指导手册所要求设计的求解约瑟夫环问题的函数。

    思考展望:这是一个很有趣的求解问题,笔者使用了Python的列表循环求解,再次体现了Python的简洁与美,如果采用C语言的话,或许在设计最初的循环链表结构时,就要花费不少代码量了。或许真的应了那句话:“人生苦短,我用Python”~

    

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

举报
请填写举报理由
0/200