约瑟夫问题求解.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
示例5:约瑟夫问题 约瑟夫问题:  17世纪的法国数学家加斯帕在《数目的游戏问题》中讲的一个故事,原始版本如下:  15个基督徒和15 个异教徒在深海上遇险,必须将一半的人投入海中,其余的人才能幸免于难,于是想了一个办法:30个人围成一圆圈,从第一个人开始依次报数,每数到第九个人就将他扔入大海,如此循环进行直到仅余15个人为止。问怎样排法,才能使每次投入大海的都是异教徒? 约瑟夫问题 约瑟夫问题的另一种版本  若干小孩围成一圈并依次编号,教师指定从第1个小孩开始报数,报到3的小孩即令其出列。然后从下一个孩子继续报数,数到3的小孩又令其出列,如此直到所有的孩子都出列。问最后一个出列的小孩是多少号? 问题的解法:逻辑数组 约瑟夫问题 设计思路:分析及伪代码的书写演示 约瑟夫问题 设计思路 代码 问题的延伸 余下工作: 上机验证不同的例子,当n=45时最后一个离队的是43号。 模仿以上代码,写出求解约瑟夫原始版本的程序,打印出你设计好的排列顺序。若用对号表示留下,叉表示下海,则程序给出的顺序应为:√√√√×××××√√×√√√×√××√√×××√××√√× 约瑟夫问题之原始版本 约瑟夫问题之原始版本 修改 在前面增加一个数组c的定义 Dim c$(30) 将显示b数组的工作改为: For i = 1 To n c(i) = √ Next i For i = 1 To 15 c(b(i)) = × Next i For i = 1 To n If i Mod 10 0 Then Print c(i); Else Print c(i) Next i 作业 教材P92编程题第1、2、3题。 将如下数字围成一个首尾相接的环形,找出在这个环上4个连续数,使其和最大;再找出4个,使其和最小。这些数字是:20,1, 8,4,13,6,10,15,2,17,3,19,7,16,8,11,14,9,12,5。 实验报告:约瑟夫问题(两个版本)。 第五章 数组 琼州大学 * * TO BE OR NOT TO BE, THIS IS A QUESTION…… 报数、出列,再报数,再出列……是一个循环过程。如何描述?循环次数已知吗? 令rest代表队列中剩余的人数,则其初值为n,可以预想的循环操作必是如下形式: do 报数 如果报到3则标记其出列,且rest=rest-1 until rest=0 定义逻辑数组a(n),初值均取1,代表所有小孩均在队中。一旦第i号小孩出列,则将a(i)取0加以区分。 注意只有队列中的小孩才有资格报数! 报到3时的操作:通过数组a(i)标记其离队;rest=rest-1,人数减1;计数器清零,即下一次再从1开始;打印或记录离队次序; 怎样实现报数?只需用一个计数器即可。令初始时number=0,循环内number=number+1,报到3的人用if number=3 then... 来实现相应处理。 If number = 3 Then rest = rest - 1 a(i) = 0 number = 0 k = k + 1 b(k) = i End If Next i Loop Until rest = 0 For i = 1 To n If i Mod 10 0 Then Print b(i); Else Print b(i) Next i End Sub Private Sub Form_Load() Dim a%(), b%() n = InputBox(请输入个数) ReDim a%(n), b%(n) For i = 1 To n a(i) = 1 Next i rest = n number = 0 k = 0 Do For i = 1 To n If a(i) 0 Then number = number + 1 小孩出圈问题代码: If number = 3 Then rest = rest - 1 a(i) = 0 number = 0 k = k + 1 b(k) = i End If Next i Loop Until rest = 0 For i = 1 To n If i Mod 10 0 Then Print b(i); Else Print b(i) Next i End Sub Pri

文档评论(0)

1166629 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档