约瑟夫问题 用VB实现 我们的考试题目。帮下忙

来源:百度知道 编辑:UC知道 时间:2024/07/02 03:26:14
题目说明:
约瑟夫问题是计算机语言中的一个经典问题,它有多种描述方式,其中的一种描述是:编号为1,2,3……,n的n个人按顺时针方向围坐一圈,每人手持一个密码(正整数),开始任意选一个整数m作为报数的上限值,从第一个人开始顺时针自1开始顺序报数,报到m时停止报数,同时报m的人出列,并将他的密码作为新的m值,从他顺时针下一个人开始重新从1开始报数,如此下去直到所有人全部出列为止。
要求:
1.在程序界面中要按出列顺序显示每个人的编号。
2.由用户设定每次参加游戏的队列人数n和开始选定的整数m。
3.队列中每人所持的密码应随机产生,持码人出列前该密码不可见,出列后显示密码,并作为新的报数上限。
4.要有一定的帮助说明信息。
5.界面设计要美观、大方。
要用到定时器,控件数组,Move方法

核心代码如下:
Dim a() As Integer, b() As Integer, m As Integer, n As Integer, j As Integer, k As Integer, c As Integer, x As Integer
n = InputBox("请输入参加队列人数")
m = InputBox("请输入起始密码")
x = InputBox("密码的上限为:")
ReDim a(1 To n) As Integer, b(1 To n) As Integer
For i = 1 To n
a(i) = 1
b(i) = Int((x) * Rnd) + 1 '产生每个人的随机密码
Next
While c < n
For j = 1 To n
k = k + a(j) '计数
If k = m And a(j) <> 0 Then
k = 0 '下一个人从1开始报数
a(j) = 0 '出列
Print "出列人的编号为" & j; ",该人的密码为" & b(j)
m = b(j)
c = c + 1 '累计出列的人数
End If
Next
Wend
该代码已经经过调试,完全正确,请参考

约瑟夫回环问题
dim x() as boolean
m=17:n=3
redim x(n)
d=0
do while n>1
for i=1 to 17
if x(i)=false then
d=d mod 3+1
if d=3 then
x(i)=true
n=n-1