2012年7月27日 星期五

王老先生的磨菇田

內容 :

王老先生是一位磨菇農,每天的工作就是種磨菇,然後拿去市場賣。他種磨菇種了好幾十年,也因此種出了心得,擁有了一本「磨菇經」。

他發現,種出來的磨菇不是只有單調的一種,而是有千奇百怪的外型、特徵、及味道。舉例來說吧,有些磨菇非常小隻,橘色的菌傘有鮮艷的點點,王老先生就稱它為「菇菇仔」;另外有些磨菇一樣是橘色菌傘加點點,但是大隻許多,因其可愛的外型,王老先生稱它「菇菇寶貝」,據說這種磨菇的菌傘具有養生的療效;還有一些磨菇體型和菇菇寶貝差不多,但是菌傘卻是詭異的藍色,王老先生稱它「藍菇菇」;還有一種磨菇也長得跟菇菇寶貝很像,因為某些不明原因,好像腐爛掉了卻還能存活,因為「頭」上貼著恐怖的道符,王老先生稱它「殭屍菇菇」;此外,偶爾可以找到有些磨菇長得特別大隻,比人的身高還高出許多,從高處落下還會引發地震!這種磨菇王老先生就叫它「蘑菇王」!當然,還有其它許多種不同種類的磨菇,王老先生都有為它們取名字。

然而,王老先生最近卻有了困擾,因為他的磨菇田規模越來越大,菇類生長速度也越來越快、種類也越來越多,他覺得有必要幫所有種類的磨菇統計一下數目,這樣不但好管理,也比較知道能賣多少錢。因此,他非常認真地研究各種菇類生長的速度,並且把它紀錄起來,並且為它們編號。然而,因為資訊量龐大,這種苦差事只有電腦能做到,請會寫程式的你幫幫王老先生吧!

輸入說明 :

每個測資檔僅含一筆測資。

首先會輸入多行,代表磨菇園中各種磨菇的初始值,以兩個整數S(0<=S<=100),N(0<=N<=1000000)表示,S表種類的編號,N代表該種類的起始數目,以一個 -1表結束,這裡保證相同種類的蘑菇至多出現一次。接著,會輸入過了一段時間後,會有哪些種類、哪些數目的磨菇長出來,一樣以兩個整數S2(0<=S2<=100),N2(0<=N2<=1000000)表示,S2表種類的編號,N2表增加的數目,同樣保證相同種類的蘑菇至多出現一次。以一個 -1表示輸入結束。

輸出說明 :

請依照編號由小而大輸出一段時間後該種磨菇的數目,先輸出編號,再以一個空格間格,輸出數目,如果數目為0那就不用輸出。

範例輸入 :

1 633
5 572
2 696
0 814
7 996
-1
1 299
2 482
4 239
0 390
3 29
-1

範例輸出 :

0 1204
1 932
2 1178
3 29
4 239
5 572
7 996

3 則留言:

  1. Private Sub Form_Load()
    Me.Hide
    Dim s(100) As Long
    Open App.Path & "\in.txt" For Input As #1
    Open App.Path & "\out.txt" For Output As #2
    Do While Not EOF(1)
    Input #1, s1
    If s1 <> -1 Then
    Input #1, n
    s(s1) = s(s1) + n
    End If
    Loop

    For i = 0 To 100
    If s(i) <> 0 Then Print #2, i & " " & s(i)
    Next

    Close
    Close
    End
    End Sub

    回覆刪除
  2. Private Sub Form_Load()
    Me.Hide
    Open App.Path & "\in.txt" For Input As #1
    Open App.Path & "\out.txt" For Output As #2
    Dim s(100) As Long
    Do While Not EOF(1)
    Input #1, x
    If x <> -1 Then
    Input #1, n
    s(x) = s(x) + n
    End If
    Loop
    For i = 0 To 100
    If s(i) <> 0 Then Print #2, i & " " & s(i)
    Next
    Close
    Close
    End
    End Sub

    回覆刪除
  3. Dim a(), b() As Integer
    Private Sub Form_Load()
    Me.Hide
    Open App.Path & "\in.txt" For Input As #1
    Open App.Path & "\out.txt" For Output As #2
    r = 1: t = False
    Do While Not EOF(1)
    ReDim Preserve a(r), b(r)
    Input #1, x
    If x <> -1 Then
    Input #1, y
    For i = 1 To UBound(a)
    If x = a(i) And a(i) <> "" Then b(i) = b(i) + Val(y): Exit For
    If i = UBound(a) And x <> a(i) Or x = 0 And i = UBound(a) Then a(r) = Val(x): b(r) = Val(y)
    Next i
    r = r + 1
    End If
    Loop
    For i = 1 To UBound(a)
    For j = i To UBound(a)
    If a(i) > a(j) Then
    z = a(i): g = b(i)
    a(i) = a(j): b(i) = b(j)
    a(j) = z: b(j) = g
    End If
    Next j
    Next i
    For i = 1 To UBound(a)
    If a(i) <> "" Then Print #2, a(i) & " " & b(i)
    Next i
    Close #2
    Close #1
    End
    End Sub

    回覆刪除