2011年7月22日 星期五

海藻(algae)

內容 :
根據最新的生態學研究報導,在台北市植物園的蓮花池中,發現了一種奇特的海藻,此種海藻的外形具有一種十 分特殊的性質:

種子落地後,經過一天的時間,會先長出一根長一公分的綠色分枝。
綠色的分枝,經過一天的時間後,會向上成長一公分,並且變成黃色。
黃色的分枝,經過一天的時間後,會向上成長一公分,並且分成左右兩個分枝,其中左分枝為綠色,右分枝為黃色。
所有的分枝都不會互相交錯,同時恰好成長在同一個平面上。

舉例來說,若我們由左而右俯視觀察此海藻每天的生長情形,則在種子落地後的第一天,觀察結果為『綠』,第 二天的觀察結果為『黃』,第三天的觀察結果為『綠黃』,第四天的觀察結果為『黃綠黃』, 第五天的觀察結果為『綠黃黃綠黃』,依此類推。

請寫一個程式,預測在第 N 天時,由左邊數來第 K 個分枝的顏色為何。
輸入說明 :
每個測資點中的第一行有一個正整數 M 代表此測資點中共有 M 組測試資料

每組測試資料含有兩個以空白相間隔的正整數,分別依次為 N 與 K

為方便起見,所有的測試資料皆滿足 0 < M < 100,0 < N < 100 且 0 < K < 2000000000

輸出說明 :
每行輸出第 N 天時

由左邊數來第 K 個分枝的顏色(請用數字 0 代表綠色,1 代表黃色)

若第 N 天時,此海藻的分枝數少於 K,則輸出 -1

範例輸入 :

3
3 1
5 5
6 100
範例輸出 :

0
1
-1

4 則留言:

  1. Private Sub Form_Load()
    Me.Hide
    Open App.Path & "\in.txt" For Input As #1
    Open App.Path & "\out.txt" For Output As #2
    Input #1, M
    For i = 1 To M
    ans = ""
    Input #1, N, K

    If N >= K Then
    For j = 1 To N
    If j = 1 Then
    ans = "綠"
    Else
    ans = Replace(ans, "綠", "Y")
    ans = Replace(ans, "黃", "綠黃")
    ans = Replace(ans, "Y", "黃")
    End If
    Next j
    End If

    Select Case Mid(ans, K, 1)
    Case "綠": Print #2, 0
    Case "黃": Print #2, 1
    Case Else: Print #2, -1
    End Select
    Next i
    Close #2
    Close #1
    End
    End Sub

    回覆刪除
  2. 佑好,
    你的程式應該ok,這種題目,還真是不容易一眼就看懂題意,要小心。

    回覆刪除
  3. Dim N, K
    Private Sub Form_Load()

    Open App.Path & "\in.txt" For Input As #1
    Open App.Path & "\out.txt" For Output As #2

    Input #1, ti
    For i = 1 To ti
    Input #1, N, K
    Print #2, Grow(N, K, "")
    Next


    Close
    Close

    End Sub




    Function Grow(a, b, ans)

    For days = 1 To 2
    If ans = "綠" Then ans = "黃"
    If ans = "" Then ans = "綠"
    Print ans
    Next

    For days = 3 To a
    ans = Replace(ans, "綠", "暫")
    ans = Replace(ans, "黃", "綠黃")
    ans = Replace(ans, "暫", "黃")
    Print ans
    Next


    If Len(ans) < K Then
    Grow = -1
    Else
    If Mid(ans, K, 1) = "綠" Then Grow = 0 Else Grow = 1
    End If

    End Function


    這題有點在訓練程式碼放的先後...
    VB沒辦法同時執行兩行 所以還要放個"暫"來代替黃色

    回覆刪除
  4. arro好,
    程式正確。
    用暫的方式,是很好的。

    回覆刪除