题型:综合题 题类:常考题 难易度:普通
浙江省高中信息技术 算法及其程序实现单元检测
步骤1:如果待筛选的玻璃球个数<3,则认定已经找出了这个玻璃球(认定方法参照步骤2中描述),停止筛选,并输出经过的筛选总次数;否则,重复执行步骤2。
步骤2:按编号依次将玻璃球均分成3份,如果有多余的放入第3份中;比较第1、2份的玻璃球重量:
①如果第1份等于第2份的重量,则选取第3份的玻璃球作为下一次筛选的对象;
②如果第1份小于第2份的重量,则选取第1份的玻璃球作为下一次筛选的对象;
③如果第1份大于第2份的重量,则选取第2份的玻璃球作为下一次筛选的对象;
重复执行步骤1。
例如:第1次筛选的小球编号区间是1~100,均分成三份的待称重小球编号分别是1~33、34~66、67~100;第2次则选取以上3份中的一份进行再筛选、再均分……直至找到。
解决上述问题的VB程序功能如下:运行程序,在列表框List1中显示100组数据,分别代表每个编号及对应的小球重量(其中有且只有一个小球的重量与其他小球不同),单击“筛选”按钮Command1,在列表框List2中显示每次筛选的编号区间和完成筛选的总次数。程序运行界面如图。
Const maxn=100
Dim a(1 To maxn) As Integer
Dim w(1 To 2) As Integer ‘数组w用来存储第1份和第2份小球的重量
Private Sub Form Load()
‘此处代码用来模拟产生100个小球的重量,分别存储在数组元素a(1)~a(100)中;
‘其中只有1个小球的重量为8,随机存储在数组a的某元素中,其余重量均为10;
‘此处代码略
End Sub
Private Sub Command1_Click()
Dim left As Integer, right As Integer ‘left 为起始编号,right 为结束编号
Dim s As Integer, c As Integer ‘s为每次查找的区间长度
left=1: right=maxn
c=1: s=right: i=0
List2. AddItem Str (i+1)+“--->”+Str(maxn)
Do While right-left > 3
w(1)=0: w(2)=0: k=1
i=left
s=
Do While i<=(s \ 3) * 2+left-1 ‘Do语句用于将待筛选的数据进行区域划分
w(k)=w(k)+a(i)
If i=(s \ 3) * k+left-1 Then k=k+1
i=i+1
Loop
If w(1)=w(2) Then
left=left+(s \ 3) * 2
Elself w(1) < w(2) Then
Else
right=left+(s \ 3) *2-1
left=s \ 3+left
End If
List2. AddItem Str(left) &“--->” & Str(right)
Loop
List2. AddItem “经过” +Str (c)+“次后找到”
End Sub
试题篮