试题

试题 试卷

logo

题型:综合题 题类:常考题 难易度:普通

浙江省高中信息技术 查找算法及程序实现同步练习

查找并删除重复数据的算法是对数组a中每个元素逐个作为关键字进行从后往前查找,如果有重复,删除该数据后继续查找。例如,第一次将a(1)作为关键字,从a(10)到a(1)进行逐个查找,如果和a(1)相等,则删除该数据,然后继续查找;如果是a(1)本身和它相等,则代表无重复数据。编写VB程序,程序功能如下:运行程序时,在列表框List1中显示数组a中的原始数据;单击“去除重复”按钮(Command1),在列表框List2中输出去除重复后的数组a中的数据,同时在标签Label1中显示删除的数据总个数,运行效果如图所示。

请回答下列问题:

(1)、当数组a中的值依次为1,2,3,7,8,1,6,6,8,7时,共删除数据(填写数值)个。
(2)、实现上述功能的VB程序如下,请在划线处填入合适的代码。

Const maxn=10

Dim a(1 To maxn) As Integer

Private Sub Form_Load()

‘maxn个数据存储在数组a中,并在列表框List1中显示

‘代码略

End Sub

Private Sub Command1_Click()

Dim i As Integer, n As Integer     ‘n用于存储当前査找的数组长度

Dim j As Integer, key As Integer     ‘key用于存储本次查找关键字的数据位置

key=1: n=maxn

Do While key <=n

  i=n

  Do While a(i) <> a(key)

   

  Loop

  If i=key Then     ‘未找到,重新下一査找关键字

   key=key+1

  Else    ‘找到重复数据,删除

   For j=i To n-1

   

   Next j

   n=n-1

  End If

Loop

For i=1 To n

  List2.AddItem Str(a(i))

Next i

Label1.Caption=“共删除数据”++“个”

End Sub

举一反三
有N堆纸牌,编号分别为①,②,…。每堆上有若干张,但纸牌总数必为N的倍数。可以在任一堆上取若干张纸牌,然后移动。

移牌规则:在编号为①的堆上取的纸牌,只能移到编号为②的堆上;在编号为N(N≥2)的堆上取的纸牌,只能移到编号为N-1的堆上;其他堆上取的纸牌,可以移到相邻左边或右边的堆上。

现在要求找出一种移动方法,用最少的移动次数使每堆上纸牌数都一样多。

例如N=4,4堆纸牌数分别为:

9

8

17

6

移动3次可达到目的:从③取4张牌放到④(9 8 13 10)→从③取3张牌放到②(9 11 10 10)→从②取1张牌放到①(10 10 10 10)。

现编写如下代码解决4堆任意张数牌的移动问题,请按提示补充划线句的代码:

Private Sub Command1_Click()

Dim aver As Single

Dim st As Integer     ‘统计移动的步数

Dim ssum, i, j As Integer

Dim a( 1 To 100) As Integer

a(1) = Val(Text1.Text)     ‘读取各堆牌张数,求总张数aver

a(2) = Val(Text2.Text)

a(3) = Val(Text3.Text)

a(4) = Val(Text4.Text)

ssum =a(1) + a(2) + a(3) + a(4)

aver=ssum \ 4     ‘求牌的平均张数aver

For i=1 To 4

  ① 

Next i

i=1     ‘过滤初端和末端的0

j = 4

Do While a(i) = 0 And i < 4

 i=i+1

Loop

Do While a(j) = 0 And j > 1

 j = j-1

Loop

st = 0

Do While i < j      ‘开始移动牌使数组a元素值均为0并过滤掉

  ② 

 a(i) = 0

 st = st + 1

 i=i+1

 Do While a(i) = 0 And i<j      ‘过滤掉数组a元素值均为0

   ③ 

 Loop

Loop

Print st      ‘输出移动次数

End Sub

返回首页

试题篮