16.小明編寫了一個求親密數的VB程序。所謂親密數是指如果整數x的全部因子(包括1,不包括x本身)之和等于y,且整數y的全部因子之和等于x,則將整數x和y稱為親密數。 程序運行時,單擊“開始”按鈕Command1,則在列表框List1中顯示100~5000間所有親密數,在標簽Label3中顯示親密數的對數。程序運行界面如圖所示。 實現上述功能的VB程序如下,但加框處代碼有錯,請改正。 Private Sub Command1_Click ( ) Dim x As Integer,y As Integer,i As Integer,j As Integer,b As Integer,ans As Integer ans=0 For x=100To 5000 y=0 b=0 For i=1To x\2 If x Mod i=0Then y=y+i Next i For j=1Toy\2 If y Mod j=0Then b=b+j Next j If Then'① List1.AddItem Str(x)+Str(y) ans=ans+1 End If Next x '② End Sub
17.小明編寫了一個求背包最大價值的VB程序,現有n件物品和體積為M的背包,每件物品都有編號、體積和價值,且每件物品都可以任意分割(即可以取走寶貝的一部分),求裝滿后的背包的最大價值。 程序運行時,在文本框Text1中輸入物品的數量n,單擊“數據讀取”按鈕,則從數據庫讀取前n件物品的編號、價值和體積,分別存儲在數組id、jz、tj中,并顯示在列表框List1中;在文本框Text2中輸入背包的體積,單擊“求解”按鈕Command1后,在列表框List2中顯示依次所取的物品的相關信息,最后,在列表框List2中最后一行顯示背包的總價值。程序運行界面如圖所示。 算法思想: (1)首先計算出n件物品的單位價值(單位價值=價值/體積); (2)將物品按單位價值降序排序; (3)然后依次從單位價值最大的物品開始裝入背包,直到裝滿整個背包為止。 (4)輸出裝入背包的物品的相關信息。 實現上述功能的程序如下,請在程序橫線處填入合適的語句或代碼。 Dim conn As New ADODB.Connection Dim rs As New ADODB.Recordset Dim id(1To 20)As String'存儲物品的id號 Dim jz(1To 20)As Long,tj(1To 20)As Long'數組jz、tj分別存儲物品的價值和體積 Dim dwjz(1To 20)As Single'存儲物品的單位價值 Dim n As Integer'表示物品數 Private Sub Command1_Click ( ?。?br />'讀取數據庫表中前n條記錄的信息 End Sub Private Sub Command2_Click ( ) Dim m As Integer,i As Integer,j As Integer,p As Integer,tp1As String,tp2As Integer Dim tp3As Single m=Val(Text2.Text) For i=1To n dwjz(i)=jz(i)/tj(i) Next i For i=1To n-1 For j=n To i+1Step-1 If ①Then tp1=id(j):id(j)=id(j-1):id(j-1)=tp1 tp2=jz(j):jz(j)=jz(j-1):jz(j-1)=tp2 tp2=tj(j):tj(j)=tj(j-1):tj(j-1)=tp2 tp3=dwjz(j):dwjz(j)=dwjz(j-1):dwjz(j-1)=tp3 End If Next j Next i i=1 p=n ans=0 List2.AddItem“編號“+“價值“+“體積“+“裝入背包的體積“ Do While m>0Andp>=1 If m-tj(i)>=0Then ans=ans+jz(i) List2.AddItem id(i)+““+Str(jz(i))+““+Str(tj(i))+““+Str(tj(i)) Else ② List2.AddItem id(i)+““+Str(jz(i))+““+Str(tj(i))+““+Str(m) End If m=m-tj(i) i=i+1 ③ Loop List2.AddItem“背包總價值為:“+Str(ans) End Sub