用VB的二维数组实现约瑟夫环

来源:百度知道 编辑:UC知道 时间:2024/05/14 14:58:43
有M个人围成一个圈,顺序排号1号,2号,。。。,从第一个开始报数(从1报到N),凡是报到N的人退出圈子,问最后一个留下来的人是原来的几号.编写一个函数baoshu(m%,n%)实现上述功能,答应退场的顺序以及最后剩下人员的号码。
打印出来后效果是这样的。但M=10,N=7时,退场顺序为:7 4 2 1 3 6 10 5 8 最后留下人的号码 9
实在是不知道怎么做了,大虾们帮帮小弟!答出来我再追加分数。

关键是:
如果一人退出后继续往下报数还是从第一个人开始报数?我的这个程序是从第一个人开始报数的!你要说清楚啊!

==============

Private Sub Command1_Click()
MsgBox baoshu(4, 3)
End Sub

Function baoshu(ByVal m As Integer, ByVal n1 As Integer) As Integer
Dim a() As Integer
Dim i As Integer
Dim n As Integer
Dim q As Integer
ReDim a(m - 1, 1) As Integer
For i = 1 To m
a(i - 1, 0) = i
a(i - 1, 1) = 1
Next
n = 0
q = 0
While Not isOne(a, m)
If n = m Then n = 0

If a(n, 1) = 1 Then
q = q + 1
If q = n1 Then
q = 0
a(n, 1) = 0
n = -1
End If
End If

n = n + 1
Wend

For i = 1 To m
If a(i - 1, 1) = 1 Then
baoshu = a(i - 1, 0)
Exit For