求解问题
能帮着编个程序吗?
求解问题 , 高价收购 就是杀奴隶问题,奴隶数由用户输入,从哪个奴隶开杀也由用户输入,隔几个一杀还是由用户输入,求最后幸存奴隶的编号是多少用vb做
请编完联系我:qq 290695839
[解决办法]
这个不就是josephus问题吗,我在programfan发的学习帖。从第几个开杀里面没有涉及到,稍微修改一下就可以实现。。加点分即可。
Option Base 1
Private Sub jose(ByVal i As Integer, ByVal far As Integer)
Dim j%, k#, n%
Dim num
ReDim arr(i) As Integer
For num = 1 To i
arr(num) = num
Next
k = 0: n = 1: j = 0
Do While j < i
If arr(n) <> 0 Then '如果孩子标志为未退场,则加入计数
k = k + 1
If k Mod far = 0 Then '把下一个退场的孩子输出
Text1.Text = Text1.Text & arr(n) & Space$(2)
DoEvents
arr(n) = 0 '给退场的孩子做标记
j = j + 1 '计算已经退场了的孩子的个数
End If
End If
n = n + 1
n = n Mod (i + 1) '如果数到一圈的末尾
If n = 0 Then n = 1 '则接着从头循环数
Loop
End Sub
Private Sub Command1_Click()
Dim ret1, ret2
Text1.Text = "孩子退场的顺序依次是: "
ret1 = Val(InputBox( "请输入孩子的个数 ", "输入 ", 0))
ret2 = Val(InputBox( "请输入循环的距离 ", "输入 ", 0))
If ret1 <= ret2 Or ret2 = 0 Or ret1 > 5000 Then '输入太大的值并没有太大的意义
MsgBox "输入不是很规范,请重新输入! "
Exit Sub
End If
jose ret1, ret2
MsgBox "完毕! "
End Sub