题目

从前有一只九尾狐叫小九,他拥有超高的智商,喜欢数学推理。最近他喜欢上了利用约瑟夫环玩推理纸牌的游戏。即给定n张环形排列的纸牌,选定最小的一张牌为起始位置。第一次取第1张牌(起始位置的纸牌),第二次间隔1张取第3张纸牌,第三次 间隔2张取第6张纸牌,……直到取完为止(如果取的位置超过n,重新从1位置取)。如果有4张纸牌,那么取的纸牌编号依次为1,3,4,2。同样,可以知道每张纸牌的被取走的顺序如下表。 序号 1 2 3 4 1 轮次 1 2 1 3 1 4 1 2 轮次 2                     2 2 4 2 3 轮次 3 2 3 4 轮次 4 纸牌被取走顺序也可以理解为纸牌存留的轮次。每次取走一张纸牌后,下一轮第一张纸牌编号为该纸牌的后一张。上述例子中3第二个被取,留存轮次2,下一轮的第一张纸牌为4,剩下的纸牌留存轮次增加。 现在,只要给小九纸牌的数量n,他能通过逆推法快速地计算出取的纸牌编号顺序,方法如下(以n=4为例): 逆推得到的纸牌顺序 1 4 2 3 最终得到的纸牌编号 1 2 3 4 即在第i轮,上一轮纸牌轮次加1,并在后面增加一张轮次为1的纸牌。然后将轮次为1放在最前的位置,最后整体循环向右移动n-i次。直到n轮后,可知每张纸牌被取走的顺序,根据此顺序,得到每次取走纸牌的编号。 轮次 数组 1    2    3    4 1 a(1)=1 1 2 ①前一轮所有值加1 ②第二位增加数值1 ③将轮次为1的数放在最前 ④整体右移动2位 2 2    1 1    2 1    2 3 ①前一轮所有值加1 ②第三位增加数值1 ③将轮次为1的数放在最前 ④整体右移动1位 2    3 2    3    1 1    2    3 3    1    2 4 ①前一轮所有值加1 ②第四位增加数值1 ③将轮次为1的数放在最前 ④整体右移动0位 4    2    3 4    2    3 1    4    2 1    4    2 根据以上算法小九编写了如下VB程序,请回答下列问题。 (1) 由题意可知,当n的值为6时,1~6张纸牌被取走顺序为。 (2) 请在划线处填入合适的代码。 Dim n As Integer Dim a(1 To 100) As Integer Private Sub Command1_Click()     Dim i As Integer, j As Integer,k As Integer     Dim ans As String, x As Integer     n = Val (Text1. Text)     a(1) = 1     For i=2 To n         For j=1 To i-1                      Next j         j=i         Do While j>1             a(j)=a(j-1)             j=j-1         Loop         a(1) = 1         For j=1 Ton - i             k = a(1)                          a(x) = k         Next j     Next i     ans =“”     For i=1 Ton         ans = ans + Str(a(i))     Next i     Label1. Caption =“序列为:”+ ans End Sub Function yd(i As Integer) As Integer     Dim j As Integer, tmp As Integer     For j=i To 2 Step -1         tmp=j+1         If tmp > i Then         a (tmp) = a(j)     Next j     yd=j+1 End Function 答案: 【1】1 4 2 5 6 3 【1】a(j) = a(j) + 1【2】x = yd(i)【3】tmp = 1
信息技术 试题推荐
最近更新