- 基础理论
- 数据及数据库技术
- 人工智能
- 算法理论
- 算法实例
- 面向对象程序设计 VB开发工具
- + 算法实例的程序实现
- 过程和自定义函数
- 枚举算法及程序实现
- 解析算法及程序实现
- 递归算法及程序实现
- 排序算法及程序实现
- 查找算法及程序实现
- 算法及算法的表示方法
- 多媒体理论
- 基础软件操作
- 算法软件操作
- 多媒体软件操作
- 网络技术应用

小张经分析,每次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 SubPrivate 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)程序运行界面中使用的对象个数为_________,要使命令按钮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
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.3 | B.6 | C.a1b2c3 | D.3c2b1a |
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.abcd12XY | B.abcd12xy | C.ABCD12XY | D.ABcd12xy |
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的值为_____________
问题描述:山顶上共有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次所进洞的编号是____________________。
基本想法:利用插入排序算法,对奇偶子序列分别插入排序。用两个变量把整个数组分割为三个部分,第一个部分为奇数有序子序列,第二部分为偶数有序子序列,第三部分为未排序子序列。使用两个变量进行分割,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
划线处的代码有误,请改正:
①___________________________
②___________________________
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.1 | B.2 | C.5 | D.7 |
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.13 | B.11 | C.10 | D.15 |

(注:字母“A”的ASCII码值为65,字母“a” 的ASCII码值为97)
(1)按观察程序代码,可知“启动”按钮的对象名为_________ 。(单选,填字母
A.Timer1 / | B.Start / | C.Command1 / | D.Start_1 / | E.启动) |
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
划线处的代码为:
①_______________________________
②________________________________
③________________________________