题库 高中信息

题干

给定一个序列 a,这个序列由 n 个数组成(n 个数依次保存在数组 a(1) ~a(n)中),现在给定一个整数 p,要求将序列 a的前 p 个数与后 n-p 个数对调,且不改变这 p 个数(和 n-p个数)之间的相对位置。例如长度为 5 的序列 1,2,3,4,5,当 p=2 时重排的结果为 3,4,5,1,2。
我们可以用两种不同的方法来实现这一目的:
方法一:逐个地将数组 a 的后 n-p 个数依次移动到前面去。
数组 a:
1
2
3
4
5
 

3
1
2
4
5
 

3
4
1
2
5
 

3
4
5
1
2
 
方法二:将前 p 个数看作一个区间,后 n-p 个数看作另一个区间,依次将数交换,同时缩小区间的大小;若某一个区间达到末尾,则调整区间的范围,直到两个区间刚好同时达到末尾,即调整结束。
数组 a:

互换并调整区间:第一个区间结束且第二个区间还有元素,调整区间 1 和区间 2 的范围,如图将区间 1 调整为[3,4],区间 2 调整为[5:5]。

互换并调整区间:第二个区间结束且第一个区间还有元素,仅调整第 1 个区间的起始位置。

互换并结束:两个区间同时到达末尾。
3
4
5
1
2
 
小明依据上面的方法设计了 VB 程序如下:
Dim a(1 To 100), i As Integer, j As Integer, tmp As Integer, p As Integer
Dim start1 As Integer, end1 As Integer, start2 As Integer, end2 As Integer  '将序列保存到数组 a中,序列长度保存到 n 中,移动数字的个数保存在 p 中
Private Sub Command2_Click() '用方法一实现
For i = p + 1 To n
tmp = a(i)
For j = i To     Step -1
a(j) = a(j - 1)
Next j
    = tmp
Next i
End Sub
Private Sub Command3_Click() '用方法二实现
start1 = 1: end1 = p '第 1 个区间的起始状态
start2 = p + 1: end2 = n '第 2 个区间的起始状态
i = start1: j = start2
Do While        
i = start1: j = start2
Do While i <= end1 And j <= end2
tmp = a(i): a(i) = a(j): a(j) = tmp
i = i + 1:j = j + 1
Loop
If i <= end1 Then   '第 2 个区间结束且第 1 个
区间还有元素
start1 = i
ElseIf j <= end2 Then  '第 1 个区间结束且第 2
个区间还有元素
start1 = i:  
start2 = j
End If
Loop
End Sub
请回答下列问题:
(1)若序列为:9,8,13,22,7,6,5,37,6,p=4 时,使用方法一,则 a(3)的值依次是 13,_________________(用逗号隔开,顺序填写曾存储过的值)。
(2)请在划线处填入合适的代码。
①_______________________
②_______________________
③_______________________
④_______________________
上一题 下一题 0.99难度 None 更新时间:2020-03-28 10:23:38

答案(点此获取答案解析)

同类题2

小李父母开了一家农家乐,顾客可以到桔园自摘桔子,收费标准是门票每人20元,采摘的桔子每斤10元,付费时若能完成小游戏则有优惠。用VB软件设计的自摘收费程序,功能如下:在文本框Textl中输入自摘的人数n,在文本框Text2中输入摘得桔子重量w。界面右上方是小游戏部分,程序在文本框Text3显示随机产生的桔子层数m,根据图中所示的堆桔子方法(第1层1个;第2层4个;第3层9个……),请顾客计算出m层桔子总数s,输入到文本框Text4中,单击“是否优惠计算”按钮Command1,就会在标签Label4中输出最后的费用f,并在标签Label7中给出提示是否“优惠后的费用”。运行效果如图所示: 

(1)自摘收费程序所用的算法是_____________(填:解析算法/枚举算法)。
(2)为实现上述功能,请在划线①和②处填入合适的代码。
Dim m As Integer
Private Sub Command1_Click() 
Dim n As Integer, s As Integer
Dim w As Single, f As Single
n = Val(Text1.Text) '输入大人人数n
w = Val(Text2.Text)     '输入重量w
f = 20 * n + 10 * w '计算无优惠的费用f
s = 0
For i = 1 To m '计算桔子总数
s = s + i * i
Next i
If  s= __________  Then '判断是否拿到优惠计算费用
f = f * 0.5 + s * 0.3 '计算优惠后的费用
Label7.Caption = "恭喜你,这是优惠后的费用!"
Else
Label7.Caption = "很遗憾,你没有算对哦!"
End If
Label4.Caption = Str(f) '输出最后的费用f
End Sub
Private Sub Form_Load()
Randomize
m = ________________ '随机产生15层及以内的桔子层数(0不算)
Text3.Text = Str(m)
End Sub
(3)若3位顾客摘得5斤桔子,游戏中需要计算出3层桔子的总个数,但是他们没有算对桔子个数,在text4中输入了16,那么这3位顾客需付总费用__________元。