2011年10月17日 星期一

十月小考

100程式設計選手隊小考
題1:4x4數字方陣
‭ ‬請寫程式將1到16的數字,排進4x4的數字格中,讓直行、橫行、對角線的加總都相同。

題2‭:‬空間切割
‭ ‬對輸入的任意正整數n,空間中的n個平面最多可將空間切成幾個區域‭?‬
‭ ‬輸入例‭:(‬in2‭.‬txt‭)‬
‭ ‬1
‭ ‬2
‭ ‬輸出例‭:(‬out2‭.‬txt‭)‬
‭ ‬2
‭ ‬4
題3‭:‬海藻(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. Option Base 1
    Private Sub Form_Load()
    Open App.Path & "\out.txt" For Output As #2
    Call A2("X", 0)
    Close #2
    End Sub

    Sub A2(a, b)
    If b = 16 Then
    Dim m
    m = Split(a)
    Print m(0)
    If Val(m(1)) + Val(m(2)) + Val(m(3)) + Val(m(4)) = 34 Then
    If Val(m(5)) + Val(m(6)) + Val(m(7)) + Val(m(8)) = 34 Then
    If Val(m(9)) + Val(m(10)) + Val(m(11)) + Val(m(12)) = 34 Then
    If Val(m(13)) + Val(m(14)) + Val(m(15)) + Val(m(16)) = 34 Then
    If Val(m(1)) + Val(m(6)) + Val(m(11)) + Val(m(16)) = 34 Then
    If Val(m(4)) + Val(m(7)) + Val(m(10)) + Val(m(13)) = 34 Then
    If Val(m(1)) + Val(m(5)) + Val(m(9)) + Val(m(13)) = 34 Then
    If Val(m(2)) + Val(m(6)) + Val(m(10)) + Val(m(14)) = 34 Then
    If Val(m(3)) + Val(m(7)) + Val(m(11)) + Val(m(15)) = 34 Then
    If Val(m(4)) + Val(m(8)) + Val(m(12)) + Val(m(16)) = 34 Then
    Call A3(a)
    Exit Sub
    End If
    End If
    End If
    End If
    End If
    End If
    End If
    End If
    End If
    End If

    Else
    For i = 1 To 16
    If instr2(a, i) = 0 Then Call A2(a & " " & i, b + 1)
    Next
    End If
    End Sub

    Function instr2(a, b)
    Dim m
    m = Split(a)
    instr2 = 0
    For i = 0 To UBound(m)
    If Val(b) = Val(m(i)) Then instr2 = 1
    Next

    End Function

    Sub A3(a)
    Dim m
    m = Split(a)

    Print #2, m(1); m(2); m(3); m(4)
    Print #2, m(5); m(6); m(7); m(8)
    Print #2, m(9); m(10); m(11); m(12)
    Print #2, m(13); m(14); m(15); m(16)
    Exit Sub

    End Sub









    //////////////////////////////

    Dim n, ans
    Private Sub Form_Load()
    Me.Hide
    Open App.Path & "\in2.txt" For Input As #1
    Open App.Path & "\out2.txt" For Output As #2

    Do While Not EOF(1)
    Input #1, n

    If n Mod 2 = 0 Then
    ans = ((n / 2) + 1) ^ 2
    Else
    n = n - 1
    ans = ((n / 2) + 1) ^ 2 + ((n / 2) + 1)
    End If

    Print #2, ans
    Loop

    Close
    Close
    End
    End Sub

    //////////////////////////////

    Dim N, K, Ans
    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, t
    For i = 1 To t
    Input #1, N, K
    Ans = "N"

    For days = 1 To N
    If Ans = "N" Then
    Ans = "0"
    Else
    Ans = Replace(Ans, "0", "X")
    Ans = Replace(Ans, "1", "01")
    Ans = Replace(Ans, "X", "1")
    End If
    Next

    If Len(Ans) < K Then
    Print #2, "-1"
    Else
    Print #2, Mid(Ans, K, 1)
    End If

    Next



    Close
    Close

    End
    End Sub

    回覆刪除
  2. '先建立16個陣列名稱為T的Textbox
    '以公式套入
    '第1、4、6、7、10、11、13、16格為黃色

    Dim X(16) As Boolean
    Private Sub Form_Load()
    Me.Hide
    Open App.Path & "\out.txt" For Output As #2

    For i = 1 To 16
    X(i) = False
    Next i

    For i = 1 To 16
    If T(i).BackColor = &H80000005 Then T(i).Text = i: X(i) = True
    Next i

    For i = 1 To 16
    Print i & " " & X(i)
    Next i

    For i = 1 To 16
    If T(i).BackColor = &HFFFF& Then Call Find(i)
    Next i

    For i = 1 To 16
    If Len(T(i).Text) = 1 Then T(i).Text = "0" & T(i).Text
    Print #2, T(i).Text & " ";
    If i Mod 4 = 0 Then Print #2,
    Next i


    Close #2
    End
    End Sub

    Sub Find(A)
    For i = 16 To 1 Step -1
    If X(i) = False Then T(A) = i: X(i) = True: Exit For
    Next i
    End Sub
    //////////////////////////////////////////
    Private Sub Form_Load()
    Me.Hide
    Open App.Path & "\in2.txt" For Input As #1
    Open App.Path & "\out2.txt" For Output As #2
    Do While Not EOF(1)
    Input #1, N
    X = 2
    ans = 2

    For i = 1 To N - 1
    ans = ans + X
    If i Mod 2 = 0 Then X = X + 1
    Next i

    Print #2, ans

    Loop
    Close #2
    Close #1
    End
    End Sub

    //////////////////////////////////////////
    Private Sub Form_Load()
    Me.Hide
    Open App.Path & "\in3.txt" For Input As #1
    Open App.Path & "\out3.txt" For Output As #2
    Input #1, N
    For i = 1 To N
    Input #1, D, T

    X = "綠"
    For j = 2 To D
    X = Replace(X, "綠", "Y")
    X = Replace(X, "黃", "綠黃")
    X = Replace(X, "Y", "黃")
    Next j

    If Mid(X, T, 1) = "黃" Then Print #2, "1"
    If Mid(X, T, 1) = "綠" Then Print #2, "0"
    If Mid(X, T, 1) = "" Then Print #2, "-1"

    Next i
    Close #2
    Close #1
    End
    End Sub

    回覆刪除
  3. Private Sub Form_Load()
    Me.Hide
    Open App.Path & "\out.txt" For Output As #2

    m = Split("16 2 3 13")
    Print #2, m(0) & " " & m(1) & " " & m(2) & " " & m(3)
    m = Split("5 11 10 8")
    Print #2, m(0) & " " & m(1) & " " & m(2) & " " & m(3)
    m = Split("9 7 6 12")
    Print #2, m(0) & " " & m(1) & " " & m(2) & " " & m(3)
    m = Split("4 14 15 1")
    Print #2, m(0) & " " & m(1) & " " & m(2) & " " & m(3)

    Close
    End
    End Sub

    //////////////////////
    我覺得第一題這樣也可以呢!
    "‬請寫程式將1到16的數字,排進4x4的數字格中,讓直行、橫行、對角線的加總都相同。"
    有用排的進去,計算總和也都相同
    比賽找要答案對就可以吧?!

    回覆刪除
  4. arro好,佑好,
    你們的第2題,都不對吧。
    當3個平面時,可以分割成8個空間。
    當4個平面時,可以分割成15個空間。

    arro好,只要符合題目的要求,那就是正確的程式。
    另外,要求,是一定要做的。提示,只是可能的解答方向而已。

    回覆刪除