1. 【约瑟夫问题】猴子选大王。有n(n≤100)猴子举行选大王大会,由于大家谁也不服谁,因此有猴子提议使用玩游戏的方式来选出大王。首先将n只猴子进行随机编号(编号为1到n,猴子编号不重复),然后产生一个随机数k,游戏规则如下n只猴子按编号从小到大的顺序围成一圈,并从编号为1的猴子开始报数(1,2,3…),报到k的猴子出圈(出圈即被淘汰);接着再由出圈的猴子的下一只猴子重新开始报数(1,2,3…),报到k的猴子又出圈,如此继续,直到圈中只剩下一只猴子,它就是猴子大王。要求依次输出出圈的猴子的编号及猴子大王的编号。

例如n=8,k=6,则依次出圈的猴子的编号为6、4、3、5、8、7、2,最后剩下的猴子的编号为1,即猴子大王的编号为1。

程序运行时,在文本框Text1中输入猴子的总数n,单击“产生随机数k”按钮Command1将生成一个随机整数k(1≤k≤n),并在标签 Label3中显示k的值,单击“选大王”按钮Command2后,将在文本框Text2中显示依次出圈的猴子的编号,在标签Label6中显示猴子大王的编号。程序运行结果如图所示。

实现上述功能的VB程序如下,请在划线处填入合适的代码。

Dim k As Integer, n As Integer

Private Sub Command1_Click ( )

  Randomize

  n= Val(Text1. Text)

  k = Int (Rnd n) + 1

  Label3. Caption Str(k)

End Sub

Private Sub Command2_Click ( )

  Dim a (1 To 100) As Integer    ‘a(i) = 1 表示编号为i的猴子在圈上,a(i) = 0表示出圈

  Dim b (1 To 100) As Integer    ‘ 数组元素b(i)=x,表示第i只出圈的猴子的编号为x

  Dim i As Integer, st As String, j As Integer

  Dim p As Integer, sum As Integer    ‘ p表示出圈的猴子数,sum表示报数的数值

  For i = 1 To n

    a(i) = 1

  Next i

  p = 0

  j = 0

  Do While p <> n-1

          ①    

    Do While sum < k    ‘ 依次报数,直到报到k为止

      j=j+1

      If j > n Then j = 1    ‘ 报数至最后时,将重头继续报

      sum = sum + a(j)

    Loop

    a(j) = 0: p =p+1

          ②    

  Loop

  For i=1 To p

    st= st str(b(i)

  Next i

  Text2. Text = st

  i=1

  Do While a(i) <> 1

    i=i+1

  Loop

  Label16. Caption =     ③    

End Sub

 ② ③ 

【考点】
运算符、基本运算与表达式; 常量、变量及变量的赋值;
【答案】

您现在未登录,无法查看试题答案与解析。 登录
综合题 普通
基础巩固
能力提升
变式训练
拓展培优
换一批