5.有如下程序段: i=1:j=8:count=0: f=False Key=Val(Text1.Text) Do While i<=j m=(i+j)\2 If a(m)=Key Then count=count+1 f=True Exit Do If a(m)<Key Then i=m+1 Else j=m-1 End If Loop 數(shù)組元素a(1)到a(8)分別為1,2,3,4,5,6,6,7,在Text1輸入6,執(zhí)行該程序段后,下面說法正確的是( ?。?/h2>
31.過橋問題。n個旅行者在夜晚要通過一座狹窄的橋,橋上最多只能上2個人且必須借助手電筒,手電筒只有一只。為了所有人在最短時間內(nèi)過橋,設(shè)計(jì)算法如下: (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拿手電筒回來。 為驗(yàn)證方案,小明設(shè)計(jì)了相應(yīng)的VB程序。首先從數(shù)據(jù)庫中獲取每個人的過橋時間,并顯示在列表框List1中,單擊“計(jì)算”按鈕 Command1,在文本框Text1中輸出最短耗時,界面如圖a所示。 (1)V程序代碼如下,請?jiān)跈M線處填入合適的代碼。 Dim n As Integer‘存放過河人數(shù) Dim t(1 To 100)As Integer’存放每個人單獨(dú)過橋時間 Private Sub Form_ Load( ?。?br />從數(shù)據(jù)庫中讀取每個人的過橋時間顯示在列表框List1中,并統(tǒng)計(jì)總?cè)藬?shù)n,代碼略 End Sub Private Sub Commandl Click( ?。?br />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“對每個人的過橋耗時進(jìn)行升序排序 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個人,他們單獨(dú)過橋耗時(單位s)如圖b所示,則程序運(yùn)行后文本框Text2中顯示的最短耗時是
(單選,填字 母:A.Form.Caption=“生成合唱隊(duì)列”/B.Label1.Caption=“生成合唱隊(duì)列”/C.Form1.Caption=“生成合唱隊(duì)列”) (2)實(shí)現(xiàn)上述功能的VB程序如下,請?jiān)跈M線處①②③填入合適代碼。 (3)程序加框處代碼有錯,請改正。 Dim a(1 To 100)As Integer Dim n As Integer Private Sub Command1_Click ( ) '在文本框 Text1 中輸入 n(n<=100) '排序前數(shù)據(jù)存儲在數(shù)組 a 中,并在文本框 List1 中顯示 '代碼略 End Sub Private Sub Command2_Click ( ?。?br />Dim i As Integer,j As Integer,t As Integer Dim pMax1 As Integer,pMax2 As Integer pMax1=n\2+1:pMax2=n\2 If①Then For i=1 To n If a(i)>a(pMax1)Then t x k w=a(pMax1):a(pMax1)=a(i):a(i)=t Next i pMax1=pMax1+1 End If For i=1 To n\2 If ②Then t=a(pMax1):a(pMax1)=a(pMax2):a(pMax2)=t j=pMax1 Mod n+1 Do While j<>pMax2 If a(j)>a(pMax1)Then t=a(pMax1):a(pMax1)=a(j):a(j)=t t=a(pMax2):a(pMax2)=a(j):a(j)=t t=a(pMax2):a(pMax2)=a(j):a(j)=t End If ③ Loop pMax1=pMax1+1 pMax2=pMax2-1 Next i For i=1 To n List2.AddItem Str(a(i)) Next i End Sub