(加试题)n堆金币,把两堆金币合并到一起,n堆金币经过n-1次合并之后就只剩下一堆了。如何消耗最少的体力,把这n堆金币合并成一堆?合并所消耗的体力等于每次合并两堆金币的重量之和。比如,n=3时表示共有3堆金币,每堆重量分别是2、1、9.一种合并方案是2和9合并,新堆重量是11,消耗体力为11;接着11和1合并,新堆重量是12,消耗体力为12,因此总消耗体力是11+12=23。另一种方案是:1和2合并,新堆重量是3,消耗体力为3;接着3和9合并,新堆重量是12,消耗体力为12,因此总消耗体力是3+12=15。可以证明这就是最少消耗体力。
 
小张经分析,每次n堆金币如果都是从小到大,将前两堆合并成新一堆,然后,继续进行从小到大排序,如此合并成最后一堆,此时消耗体力最少,为此他编写了一个解决上述问题,求最少体力的VB程序,功能如下:窗体加载时,自动读取n堆金币的数据,依次存储在数组元素a(1)、a(2)、a(3)…中,金币堆数存储在变量n中,n堆金币的重量数据显示在列表框List1中。单击“求解”按钮Command1,程序对n堆金币进行合并处理,消耗最少的体力显示在文本框Text1中。程序运行界面如图所示。
(1)如果有5堆金币,每堆重量分别是12、8、5、9、15,则将这5堆金币合并成一堆金币,最少消耗体力是__________。
(2)实现上述功能的VB程序如下,请在划线处填入合适的代码。
Const n = 10
Dim i As Integer, j As Integer, t As Integer
Dim a(1 To n) As Integer
Private Sub Form_Load()

'本过程用于读取n堆的数据并存储在数据a中

'代码略

End Sub
'sort(x)过程的功能是对a(x)、a(x+1)、……、a(n)中的数进行从小到大排序
Private Sub sort(x As Integer)

For i =__________To n - 1

For j = n To i + 1 Step -1

If a(j) < a(j - 1) Then

t = a(j): a(j) = a(j - 1): a(j - 1) = t

End If

Next j

Next i

End Sub
Private Sub Command1_Click()
Dim sum As Integer, k As Integer

sum = 0

sort (1)

For k = 1 To n - 1

a(k + 1) = a(k) + a(k + 1)

sum = sum +  ___________ 

sort (______)

Next k

Text1.Text = Str(sum)

End Sub
当前题号:1 | 题型:填空题 | 难度:0.99
十进制数转换为二进制数。小林用VB编写了一个程序,把输入的十进制数转换为二进制数,并判断二进制数中的“0”和“1”的个数是否相等。程序运行界面如图所示,在文本框Text1中输入要转换的十进制数,单击命令按钮Command1后,在文本框Text2中输出其对应的二进制数,在标签Label3中显示“相等”或“不相等”。

(1)程序运行界面中使用的对象个数为_________,要使命令按钮Command1上的文字显示为“转换”,应修改的属性名为_____________。
(2)为实现上述功能,请在划线处填入合适代码。
Private Sub Command1_Click()
Dim st As String
Dim x, y, c0, c1 As Integer
st = "": c0 = 0: c1 = 0
x =_____________
Do While x <> 0
y = _____________
If y = 0 Then
c0 = c0 + 1: st = y & st
Else
c1 = c1 + 1: st = y & st
End If
x = x \ 2
Loop
Text2.Text = st
If ____________ Then
Label3.Caption = "相等"
Else
Label3.Caption = "不相等"
End If
End Sub
当前题号:2 | 题型:填空题 | 难度:0.99
有如下程序段:
s = ""
For i = 1 To Len(Text1.Text)
s = s + Mid(Text1.Text, Len(Text1.Text) - i + 1, 1)
Next i
若文本框Textl中输入“a1b2c3”,执行程序后,变量s的值为(   )
A.3B.6C.a1b2c3D.3c2b1a
当前题号:3 | 题型:选择题 | 难度:0.99
有如下VB程序:
s=Text1.Text
s1=" "
For i=1 To Len(s)
c=Mid(s, i, 1)
If  c>="A" And c<="Z"   Then
c=Chr(Asc(c)+32) '大写字母转化为小写字母
End if
s1=s1+c
Next i
Text2.Text=s1
在文本框Textl中输入"ABcd12XY ",执行上述程序段后,文本框Textl显示的内容是(   )
A.abcd12XYB.abcd12xyC.ABCD12XYD.ABcd12xy
当前题号:4 | 题型:选择题 | 难度:0.99
有如下VB程序段:
n = 0
For i = 1 To Len(Text1.Text)
c = Mid(Text1.Text, i, 1)
If c >= "0" And c <= "9" Then m = 1 Else m = 2
a(m) = a(m) + 1
If a(m) = 1 Then n = n + 1
Next i
数组a各元素的初始值都为0,文本框Textl的内容为“Luck2018”。执行程序后,变量n的值为_____________
当前题号:5 | 题型:填空题 | 难度:0.99

   问题描述:山顶上共有10个洞,一只兔子和一只狐狸相遇了,狐狸要吃兔子。兔子对狐狸说:“你可以吃掉我,但必须先找到我。我就藏在这10个洞的其中一个洞中(注:第1~10个洞的编号分别为:1、2、3、4、5、6、7、8、9、0)。你先到1号洞找我,若没找到,则第二次隔一个洞找我,即3号洞;第三次隔两个洞找我,即6号洞;以后以此类推,找到就可以吃掉我。”狐狸答应了,但是狐狸进进出出100次后,也没找到兔子,请问兔子躲藏在哪个洞?


根据规则,前面5次进洞的情况如下表所示。

第i次进洞

洞的实际编号

1

1

2

3

3

6

4

0

5

5

……

……

 

解决此问题的VB程序界面如右图所示,单击“运行”按钮,在列表框List1中显示兔子可能躲藏的山洞编号。

模拟上述过程的VB程序代码如下。
Private Sub  Run_Click()
Dim i As Integer , k As Integer
Dim hole(0 To 9) As Boolean    'hole(0)表示第10号洞
For i = 0 To 9
hole(i) = True
Next i
k=
For i = 1 To 100
k = k + i
hole(k Mod 10) = False
Next i
For i = 0 To 9
If   Then List1.AddItem Str(i)    '输出兔子可能躲藏的洞(编号)
Next i
End Sub
(1)结合程序设计界面和代码,可知“运行”按钮的对象名为____________________。
(2)程序中划线①处应填入___________________,②处应填入___________________。上面加框程序主要用到的是____________________(填:解析/枚举)算法。
(3)狐狸第10次所进洞的编号是____________________。
当前题号:6 | 题型:填空题 | 难度:0.99
(加试题)一个无序整数数组,对它排序,使其前半部分都为奇数有序,后半部分为偶数有序。
基本想法:利用插入排序算法,对奇偶子序列分别插入排序。用两个变量把整个数组分割为三个部分,第一个部分为奇数有序子序列,第二部分为偶数有序子序列,第三部分为未排序子序列。使用两个变量进行分割,mid 指向偶数有序子序列的一个元素,end1 指向未排序子序列(等待一个个插入前面的奇数有序子序列或偶数有序子序列)。

Const n = 7
Dim a(-1 To n) As Integer
Private Sub Form_Load()
'随机生成7个不重复的正整数到a()数组中。代码略
End Sub
Private Sub Command1_Click()
Dim mid As Integer, end1 As Integer
Dim i As Integer, j As Integer, num As Integer
mid = 0: end1 = 0
Do While end1 <= n
num = a(mid)   ‘①
j = end1
If num Mod 2 = 1 Then
Do While j - 1 >= mid and a(j - 1) < num ‘②
a(j) = a(j - 1)
j = j - 1
Loop
a(j) = num
mid = mid + 1
Else
Do While a(j - 1) > num And j - 1 >= mid
a(j) = a(j - 1)
j = j - 1
Loop
a(j) = num
End If
end1 = end1 + 1
Loop
For i = 0 To n
List1.AddItem Str(a(i))
Next i
End Sub
划线处的代码有误,请改正:
①___________________________
②___________________________
当前题号:7 | 题型:填空题 | 难度:0.99
(加试题)有如下VB程序段:
Private Sub Command1_Click()
Dim a(0 To 9) As Integer
Dim t as Long
t = Val(Text1.Text)
Do While t <> 0
a(t Mod 10) = a(t Mod 10) + 1
t = t \ 10
Loop
For i = 0 To 9
If a(i) <> 0 Then x = x + a(i)
Next i
End Sub
若在文本框 Text1 中输入 3141592,则程序执行后,变量 x 的值为( )
A.1B.2C.5D.7
当前题号:8 | 题型:选择题 | 难度:0.99
(加试题)某程序代码如下:
Private Sub Command1_Click()
Dim c  As Integer
Dim a(1 To 20) As String
s = "123 how are you": c = 0
For i = 1 To Len(s)
a(i) = Mid(s, i, 1)
Next i
For i = 1 To Len(s) - 1
For j = Len(s) To i + 1 Step -1
If a(j) < a(j - 1) Then
k = a(j): a(j) = a(j - 1): a(j - 1) = k
End If
Next j
Next i
For i = 1 To Len(s) - 1
If a(i) < a(i + 1) Then c = c + 1
Next i
Text2.Text = Str(c)
End Sub程序运行结束后,变量c的值是( )
A.13B.11C.10D.15
当前题号:9 | 题型:选择题 | 难度:0.99
编写VB程序,实现如下功能:单击启动按钮Start1,在列表框List1内每隔2秒输出一个由10个大小写字母组合成的字符串,运行界面如图所示:

(注:字母“A”的ASCII码值为65,字母“a” 的ASCII码值为97)
(1)按观察程序代码,可知“启动”按钮的对象名为_________ 。(单选,填字母
A.Timer1 /B.Start /C.Command1 /D.Start_1  /E.启动)
(2)实现上述功能的 VB 程序如下,请在划线处填入合适代码。
Private Sub Start_1_Click()
Timer1.Enabled =
End Sub
Private Sub Timer1_Timer()
Dim s As String, c As String
Dim i As Integer, e As Integer, h As Integer
Randomize
s = ""
flag = True
For i = 1 To 10
e = Int(Rnd * 52 + 1)
If e <= 26 Then
h = e + 64
Else

End If

s = s + c
Next i
List1.AddItem s
End Sub
划线处的代码为:
①_______________________________
②________________________________
③________________________________
当前题号:10 | 题型:填空题 | 难度:0.99