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