
VB高手进~!!!!!关于约瑟夫问题
题目说明:约瑟夫问题是计算机语言中的一个经典问题,它有多种描述方式,其中的一种描述是:编号为1,2,3……,n的n个人按顺时针方向围坐一圈,每人手持一个密码(正整数),开...
题目说明:
约瑟夫问题是计算机语言中的一个经典问题,它有多种描述方式,其中的一种描述是:编号为1,2,3……,n的n个人按顺时针方向围坐一圈,每人手持一个密码(正整数),开始任意选一个整数m作为报数的上限值,从第一个人开始顺时针自1开始顺序报数,报到m时停止报数,同时报m的人出列,并将他的密码作为新的m值,从他顺时针下一个人开始重新从1开始报数,如此下去直到所有人全部出列为止。
要求:
1.在程序界面中要按出列顺序显示每个人的编号。
2.由用户设定每次参加游戏的队列人数n和开始选定的整数m。
3.队列中每人所持的密码应随机产生,持码人出列前该密码不可见,出列后显示密码,并作为新的报数上限.
急求代码 展开
约瑟夫问题是计算机语言中的一个经典问题,它有多种描述方式,其中的一种描述是:编号为1,2,3……,n的n个人按顺时针方向围坐一圈,每人手持一个密码(正整数),开始任意选一个整数m作为报数的上限值,从第一个人开始顺时针自1开始顺序报数,报到m时停止报数,同时报m的人出列,并将他的密码作为新的m值,从他顺时针下一个人开始重新从1开始报数,如此下去直到所有人全部出列为止。
要求:
1.在程序界面中要按出列顺序显示每个人的编号。
2.由用户设定每次参加游戏的队列人数n和开始选定的整数m。
3.队列中每人所持的密码应随机产生,持码人出列前该密码不可见,出列后显示密码,并作为新的报数上限.
急求代码 展开
3个回答
展开全部
Private Sub Command1_Click()
Dim N As Long, M As Long, nStr As String
Dim Dui() As Long, I As Long, Ns As Long, Ms As Long, Ci As Long
Me.Cls: Me.AutoRedraw = True
N = InputBox("请输入总人数:", , 10)
ReDim Dui(1 To N)
For I = 1 To N
Dui(I) = I
Next
Do1:
If N = 1 Then
Me.Print "最后剩下:" & vbCrLf & " " & Dui(1)
Exit Sub
End If
Ms = 0 ': Ns = 0
Randomize: M = 1 + Int(Rnd * 10) '随机出列密码
Do
Ms = Ms + 1: Ns = Ns + 1
If Ns > N Then Ns = 1
If Ms = M Then
Ci = Ci + 1
Me.Print "第 " & Ci & " 次:密码 M = " & M & " 出列号:" & Dui(Ns)
nStr = " "
For I = 1 To N
If Dui(I) = Dui(Ns) Then nStr = nStr & "|" & Dui(I) & "| " Else nStr = nStr & Dui(I) & " "
Next
Me.Print nStr & vbCrLf
For I = Ns To N - 1
Dui(I) = Dui(I + 1)
Next
N = N - 1
Ns = Ns - 1
If Ns < 1 Then Ns = N
GoTo Do1
End If
Loop
End Sub
界面你自己设置吧
Dim N As Long, M As Long, nStr As String
Dim Dui() As Long, I As Long, Ns As Long, Ms As Long, Ci As Long
Me.Cls: Me.AutoRedraw = True
N = InputBox("请输入总人数:", , 10)
ReDim Dui(1 To N)
For I = 1 To N
Dui(I) = I
Next
Do1:
If N = 1 Then
Me.Print "最后剩下:" & vbCrLf & " " & Dui(1)
Exit Sub
End If
Ms = 0 ': Ns = 0
Randomize: M = 1 + Int(Rnd * 10) '随机出列密码
Do
Ms = Ms + 1: Ns = Ns + 1
If Ns > N Then Ns = 1
If Ms = M Then
Ci = Ci + 1
Me.Print "第 " & Ci & " 次:密码 M = " & M & " 出列号:" & Dui(Ns)
nStr = " "
For I = 1 To N
If Dui(I) = Dui(Ns) Then nStr = nStr & "|" & Dui(I) & "| " Else nStr = nStr & Dui(I) & " "
Next
Me.Print nStr & vbCrLf
For I = Ns To N - 1
Dui(I) = Dui(I + 1)
Next
N = N - 1
Ns = Ns - 1
If Ns < 1 Then Ns = N
GoTo Do1
End If
Loop
End Sub
界面你自己设置吧
2009-06-24
展开全部
111111
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询