| 发表于:2007-05-12 14:49:161楼 得分:30 |
这个不就是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 | | |
|