16.查找并刪除重復數據的算法是基于順序查找的優化,主要思路是把待查數據的起點元素設置成查找關鍵字,然后從后往前查找,通過結束時停留的數據位置來判斷查找結果(即結束時若停留在數據序列的起點,表示數據序列中無重復數據;否則,存在重復數據,刪除該數據后繼續查找). 編寫VB程序,實現上述算法.程序功能如下:運行程序時,在列表框List1中顯示數組a中的原始數據;單擊“去重”按鈕(Command1),查找數組a中的重復數據并刪除,即相同的數據僅保留一個,并在列表框List2中輸出去重后的數組a中的數據,同時在標簽Label1中顯示刪除的數據總個數,運行效果如第16題圖所示. 實現上述功能的VB代碼如下,但加框處代碼有錯,請改正. Const maxn=10 Dim a(1To 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 '(1) i=i-1 Loop If i=key Then'找到重復數據,刪除;未找到,設定下一查找關鍵字 key=key+1 Else For j=i To n-1 a(j)=a(j+1) Next j n=n-1 End If Loop For i=1To n List2.AddItem a(i) Next i Label1.Caption=“共刪除重復數據:“& &“個“'(2) End Sub.
17.如果一個正整數從左到右讀與從右到左讀是一樣的,就稱它為回文式數(簡稱回數),如12321.“回數猜想”的主要思想是,對任意正整數,若它不是回數,則按下列算法即可獲得一個回數: (1)把該整數的數字順序顛倒,求得該數的逆序數; (2)將該整數和其對應的逆序數相加; (3)若相加結果不是回數,則將結果作為新的整數,返回步驟(1). 小林按照上述算法,設計了驗證回數猜想的VB程序(猜想次數不超過10次),程序功能如下:在文本框Text1中輸入一個正整數,單擊“驗證”按鈕(Command1),獲取文本框Text1中的數,當該數不是回數時,采用回數猜想的方法進行驗證,并在列表框List1中輸出每次驗證的過程,若驗證成功或驗證次數超過10次,則停止驗證,最后在列表框List1中輸出驗證結果.程序運行效果如圖所示. 實現上述功能的VB程序如下: Private Sub Command1_Click ( ) Dim t As String,a As Long,b As Long Dim count As Integer'count用于存儲回數猜想的驗證次數
t=Text1.Text count=1 Do While Check(t)=False And count<=10 a=Val(t)
c=a+b List1.AddItem Str(a) &“+“& Str(b) &“=“& Str(c) count=count+1 t=Str(c) Loop If Check(t) Then List1.AddItem“驗證成功!“ Else List1.AddItem“10次內未驗證成功!“ End If End Sub '自定義函數Turn Function Turn(x As String) As Long Dim s As String,i As Integer s=““ For i=Len(x) To 1Step-1 s=s & Mid(x,i,1) Next i Turn=Val(s) End Function '自定義函數Check,檢查x是否為回文數 Function Check(x As String) As Boolean Dim i As Integer Check=True For i=1To Len(x)\2Step 1 If Mid(x,i,1)<>
Then Check=False Next i End Function (1)程序代碼中,自定義函數Turn(x)的功能是