15.冬天到了,室外運動顯然已經不適合,因此效實中學準備要舉辦室內的乒乓球賽 啦。現在有 2k 個同學參加,每天安排若干場比賽,且每位同學每天僅參加一場比賽,試給出一種賽程安排表,使得 2k-1 天內任意兩個同學都至少比賽過一場。 按照比賽要求,可以設置賽程表為 n 行 n-1 列的二維表,其中第 i 行第 j 列的元素表 示和第 i 個選手在第 j 天進行比賽的同學編號。 若 k=1,則賽程表如下: 若 k=2,則賽程表如下: 觀察兩個表不難發現: ①第二個表的左上角和右下角與第一個表相同; ②第二個表的左下角和右上角相同,恰好是第一個表各元素值加 2. 因此可以通過第一個表來構造第二個表。同理可得,當 n=2k 個同學的比賽日程表,可以通過 n=2k-1 個同學的比賽日程表構造得到。 實現上述功能的 VB 程序如下: Private Sub Command1_Click( ) Dim a(1 To 10000)As Integer Dim n As Long,tmp As Long,i As Integer,j As Integer,t As Integer a(1)=1:n=1 k=Val(Text1.Text) For t=1 To k tmp=
n=n*2 For i=tmp+1 To n For j=1 To tmp
Next j Next i For i=tmp To n′改錯 For j=tmp+1 To n a((i-1)*2^k+j)=a((i+tmp-1)*2^k+(j+tmp) Mod n) Next j Next i For i=tmp+1 To n For j=tmp+1 To n a((i-1)*2^k+j)=a((i-tmp-1)*2^k+j-tmp) Next j Next i Next t For i=1 To n st=″″ For j=1 To n st=st+Str(a((i-1)*2^k+j)) Next j List1.AddItem st Next i End Sub 請回答下列問題: (1)該按鈕事件的標準名為
若?=?,則將他排在從頭開始過關者后面;若?=?,則將他排在從尾開始過關者前面; 則最優的過關順序為(同學 2,同學 3,同學 1),計算最短時間=3+19+22+10=54,計算時請注意,在過程中若?老師的過關時長較長,會增加?老師的過關時長,最后還需要加上?老師過關的最后一個同學的過關時長。 實現上述功能的 VB 程序如下: Private Sub Command1_Click( ) Dim a(1 To 100)As Integer,b(1 To 100)As Integer Dim m(1 To 100)As Integer,s(1 To 100)As Integer Dim ans(1 To 100)As Integer,n As Integer,tmp As Integer Dim k As Integer,i As Integer,j As Integer,t As Integer '輸入略,將同學在 A 老師處的過關時間存在 a 數組,在 B 老師處的時間存在 b 數組 n=5 For i=1 To n If a(i)>b(i) Then m(i)=b(i) Else m(i)=a(i) s(i)=i Next i For i=1 To n-1 For j=i+1 To n If ①
Then tmp=m(i):m(i)=m(j):m(j)=tmp tmp=s(i):s(i)=s(j):s(j)=tmp End If Next j Next i k=0:t=n+1 For i=1 To n If ②
Then k=k+1 ans(k)=s(i) Else t=t-1 ans(t)=s(i) End If Next i k=0:t=0 For i=1 To n k=k+a(ans(i)) If ③
Then t=k t=t+b(ans(i)) Next i Print t End Sub 請回答下列問題: (1)若在 A 老師處過關的 5 個同學的時間分別是:3 5 8 7 10,在 B 老師處過關的 是 6 2 1 4 9,那么,最終過關的總時間是