有n個同學(n為偶數),兩人一組,共分成 n/2組。令n/2個同學之體重總和為{S1,S2,……Sn},m為體重總和之平均值m=[( )/n],分組的原則為必須使得 m|之差距總和為最小。
(輸出結果的差距若非為最小,則本題算錯,零分計算。)寫一程式完成此分組工作。
輸入說明:第一列為學生人數n,(4≦n≦20)。
第二列到第n+1列為學生的體重。(30≦學生的體重≦150)
輸入範例:假定有10個同學,其體重分別為:82、53、74、84、45、46、57、67、43、47。
實際輸入之檔案(test4.txt)內容如下:
10
82
53
74
84
45
46
57
67
43
47
輸出說明:列印出每組同學之體重總和及個別體重,且必須依體重總和由大而小印出。
實際輸出之檔案(result4.txt)內容如下:
127 = 43 + 84
127 = 45 + 82
120 = 46 + 74
114 = 47 + 67
110 = 53 + 57
2006-06-06 17:28:25 · 1 個解答 · 發問者 紜曦 2 in 電腦與網際網路 ➔ 程式設計
Private Sub Command1_Click() Dim A() As Integer, I As Integer, J As Integer, T As Integer, Ts As String '將C:\Text4.txt讀入A() T = FreeFile Open "C:\Text4.txt" For Input As #T Do Until EOF(T) ReDim Preserve A(I) Line Input #T, Ts A(I) = Val(Ts): I = I + 1 Loop Close #T '從A(1)~UBound(A)做由小至大之排序 For I = 1 To UBound(A) For J = I To UBound(A) If A(I) > A(J) Then T = A(I): A(I) = A(J): A(J) = T End If Next Next 'J為學生人數 J = A(0) '建立B陣列記錄每一組之體重和及S陣列記錄每一組之體重和之運算式 ReDim B(J \ 2 - 1) As Integer, S(J \ 2 - 1) As String '頭跟尾組合成一組,如:1-10,2-9,3-8,4-7,5-6 For I = 1 To J / 2 '記錄體重和 B(I - 1) = A(I) + A(J) '記錄體重和之運算式 S(I - 1) = "=" & A(I) & "+" & A(J) J = J - 1 Next '體重和由大至小做排序 For I = 0 To UBound(B) For J = I To UBound(B) If B(I) < B(J) Then N = B(I): B(I) = B(J): B(J) = N Ts = S(I): S(I) = S(J): S(J) = Ts End If Next Next '輸出至C:\Result4.txt T = FreeFile Open "C:\Result4.txt" For Output As #T For I = 0 To UBound(B) Print #T, CStr(B(I)); S(I) Next Close #T MsgBox "已輸出至C:\Result4.txt"End Sub
2006-06-07 09:50:57 · answer #1 · answered by W.J.S. 7 · 0⤊ 0⤋