vb版约瑟夫算法.docVIP

  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文档。上传文档
查看更多
vb版约瑟夫算法

vb版约瑟夫算法 题目就是:n个人围成一圈报数,数到m的人出列,下一次从m的下一个人开始报数再到m后出列,直到最后一个人也出列,并且打印出每次出列的人是谁 ben1222...又到处发帖...那我也再帖一次...看看这个算法是否更好 集合版: Private Sub Command1_Click() ? ? Dim a As New Collection ? ? Dim n As Integer, m As Integer ? ? m = Val(Text2.Text) ? ? For n = 1 To Val(Text1.Text) ? ?? ???a.Add CStr(n) ? ? Next ? ? n = 0 ? ? While a.Count 0 ? ?? ???n = ((m + n - 1) Mod a.Count) + 1 ? ?? ???Debug.Print a.Item(n) ? ?? ???a.Remove n ? ?? ???n = n - 1 ? ? Wend End Sub 书林跋涉:对象链表版 我记得大学时候用约瑟夫环算法求过全排列 今天有空改成vb的了 大家帮忙测试一下速度吧 :) clsnode.cls 如下 Public Property Let data(ByVal vData As Long) m_Value = vData End Property Public Property Get data() As Long data = m_Value End Property Public Property Let nextnode(ByVal vData As ClsNode) Set node = vData End Property Public Property Get nextnode() As ClsNode Set nextnode = node End Property 主要代码如下: Private ListNode() As ClsNode Private Sub Command1_Click() Dim k As Long ? ? Dim sT! ? ? sT = Timer k = Val(Text1.Text) Call AllRank(k) MsgBox 总用时: Format(Timer - sT, 0.000) s End Sub Private Sub AllRank(ByVal n As Long) Dim i As Long, j As Long, k As Long, l As Long If n 12 Or n 1 Then MsgBox 太大了: Exit Sub ReDim ListNode(1 To n) As ClsNode For i = 1 To n ? ? Set ListNode(i) = New ClsNode ? ? ListNode(i).data = i Next l = factorial(n - 1) For i = 1 To n ? ? For j = 1 To l ? ? Josephus n, i, j ? ? Next Next For i = 1 To n ? ? Set ListNode(i) = Nothing Next End Sub Private Function factorial(ByVal n As Long) As Long Dim sum As Long, i As Long sum = 1 For i = 1 To n sum = sum * i Next factorial = sum End Function Private Sub Josephus(ByVal n As Long, ByVal start As Long, ByVal m As Long) Dim i As Long, Prior As Long Dim p As ClsNode, ptr As ClsNode Dim count As Long, t As Long 建立循环链表 For i = 1 To n - 1 ? ? ListNode(i).nextnode = ListNode(i + 1) Next ? ? ListNode(n).nextnode = ListNode(1) 总结点数 ? ? count = n 找开始报数的对应结点 ? ? Set p = ListNode(start) 找当前结点的直接前趋结点 If start 1 Then ? ? Prior = start - 1 Else ? ? Prior = n End If ?

文档评论(0)

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

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

1亿VIP精品文档

相关文档