首页 vb版约瑟夫算法

vb版约瑟夫算法

举报
开通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.Tex...

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 书林跋涉:对象链 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 版 我记得大学时候用约瑟夫环算法求过全排列 今天有空改成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 Set ptr = ListNode(Prior) 'Debug.Print vbCrLf Do While count > 0 t = (m - 1) Mod count For i = 1 To t Set ptr = p Set p = p.nextnode Next 'Debug.Print p.data, 'Me.Print p.data, ptr.nextnode = p.nextnode count = count - 1 Set p = ptr.nextnode Loop 'Debug.Print 'Me.Print End Sub bz3zwy:数组链表版 Option Explicit Private Sub Command1_Click() Const m% = 8 Dim a%(1 To m) Dim i%, j%, n%, p% For i = 1 To m - 1: a(i) = i + 1: Next a(m) = 1 n = InputBox("请输入出列数字n") p = m For i = 1 To m For j = 1 To n - 1: p = a(p): Next Print a(p); a(p) = a(a(p)) Next End Sub
本文档为【vb版约瑟夫算法】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_511210
暂无简介~
格式:doc
大小:18KB
软件:Word
页数:5
分类:公务员考试
上传时间:2017-12-10
浏览量:27