16.小明基于冒泡排序算法編寫了一個VB程序,功能如下:單擊“生成”按鈕Command1,在列表框List1中生成用于排序的n個數(shù)據(jù),單擊“排序”按鈕 Command2,對這組數(shù)據(jù)進行錯位排序(即從前往后依次是最小的、最大的第二小的、第二大的……依此類推),在列表框List2中依次輸出數(shù)據(jù)排序后的結(jié)果,程序運行界面如圖所示。 實現(xiàn)上述功能的VB程序如下,但加框處代碼有錯,請改正 Dim n As Integer,a(1 To 100)As Integer Private Sub Command1 Click( )
’該段程序用于隨機產(chǎn)生n個整數(shù),存儲在數(shù)組a中,并顯示在列表框istl中,代碼略 End Sub Private Sub Command2_ Click( ) Dim i As Integer,j As Integer,tmp As Integer List2.Clear tmp 1 For i 1 To n-1 For j=n To i 1 Step-1 a(i)=a(j)+a(j-1) a(i-1)=a(j)-aj-1) a(j)=a(j)-a(j-1) End if Next j Next i For i=1 To n List2.AddItem Str(a(i)) Next i End sub
17.過橋問題。n個旅行者在夜晚要通過一座狹窄的橋,橋上最多只能上2個人且必須借助手電筒,手電筒只有一只。為了所有人在最短時間內(nèi)過橋,設(shè)計算法如下: (1)如果只有1人過橋,時間為個人過橋時間。 (2)如果有2人一起過橋,時間以慢的人為準(zhǔn)。 (3)如果有3個人a、b、c,耗時Ta<Tb<Tc,過橋方案為讓a和b一起過橋,a拿手電筒回來,然后與c一起過橋。 (4)如果存在多于3個人,如a、b、……、y、z需要過橋,耗時Ta<Tb…<Ty<Tz,這時有兩種可選方案,選擇其中用時少的,直至剩余少于4人。 ①最快的1個將最慢的2個分別送過橋。 a拿手電筒與z過橋,然后a拿手電筒回來再與y一起過橋,a拿手電筒回來; ②最快的2個將最慢的2個送過橋。 讓a、b拿手電筒先過橋,a本手電筒回來,讓y、z手拿電筒過橋,然后b拿手電筒回來。 為驗證方案,小明設(shè)計了相應(yīng)的VB程序。首先從數(shù)據(jù)庫中獲取每個人的過橋時間,并顯示在列表框List1中,單擊“計算”按鈕 Command1,在文本框Text1中輸出最短耗時,界面如圖a所示。 (1)V程序代碼如下,請在橫線處填入合適的代碼。 Dim n As Integer‘存放過河人數(shù) Dim t(1 To 100)As Integer’存放每個人單獨過橋時間 Private Sub Form_ Load( ) 從數(shù)據(jù)庫中讀取每個人的過橋時間顯示在列表框List1中,并統(tǒng)計總?cè)藬?shù)n,代碼略 End Sub Private Sub Commandl Click( ) Dim i As Integer,k As Integer,j As Integer,temp As Integer Dim suml As Integer,sum2 As Integer,tsum As Integer sum1=0:sum2=0:tsum=0 For i=1 To n-1“對每個人的過橋耗時進行升序排序 k=i For j=i+1 Ton If①
Then k=j Next j If k<>i then temp=t(i):t(i)=t(k):t(k)=temp End If Next i i=n Do While i>3 sum1=2*t(1)+t(i-1)+t(i)'方案① sum2=t(1)+2*t(2)+t(i)'方案② If suml<sum2 Then tsum=tsum+sum2 End If i=
Loop If n=1 Then'剩下1個人 tsum=tsum+t(1) ElseIf n 2 Then'剩下2個人 tsum=tsum+t(2) Els'剩下3個人 tsum=③
End if Textl.Text=Str(tsum) End Sub (2)如有5個人,他們單獨過橋耗時(單位s)如圖b所示,則程序運行后文本框Text2中顯示的最短耗時是