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
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
'先建立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
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的數字格中,讓直行、橫行、對角線的加總都相同。"
有用排的進去,計算總和也都相同
比賽找要答案對就可以吧?!
arro好,佑好,
回覆刪除你們的第2題,都不對吧。
當3個平面時,可以分割成8個空間。
當4個平面時,可以分割成15個空間。
arro好,只要符合題目的要求,那就是正確的程式。
另外,要求,是一定要做的。提示,只是可能的解答方向而已。