' Problem5:糊塗情報員(16%)
' 有一位間諜,依他所屬情報單位要求編碼的方式,將他所收集到情報全部編成數字碼。但他認為這樣還是不夠安全,
' 因此他再將這些數字字串,隨意切割成好幾個整數,然後將每個整數用一個數學算式來表示。這些算式只用了加、減、
' 乘三種運算子,而且每個運算元都是正整數。最後,他為了讓他自己更為心安,他將整個密碼分成兩本密碼簿儲存。密
' 碼本A 存放這些數學算式,但他將算式內的所有括號全部拿掉,然後再將這些拿掉的括號資訊記錄在密碼本B 裡面。
' 過了不久,這個間諜發現他把密碼本B 弄丟了,再加上他的記憶力不好,很多情報內容根本記不得,所以現在沒了
' 密碼本B 幾乎束手無策。在不得已的情況下,他的情報單位派了幾位心理與腦神經專家詢問他,希望能喚起他腦海內的
' 記憶。這些專家試了好幾天,用盡各種辦法後,終於承認他的記憶力果真很差,怎麼也問不出情報內容。倒是心理學專
' 家有一發現,即這位情報員在寫密碼算式時,傾向於將括號加在那些會讓算式得最大值的位置。例如5*7+2 這個算式,
' 有兩種括法:((5*7)+2)以及(5*(7+2)),第二種括法所得的值較大。請寫一程式,算出這些算式的可能最大值。
' 輸入說明:
' 每一筆輸入資料為一行算式,運算子只有三種,即一般的加、減、乘三種二元運算子,分別以符號' +' 、' -' 、' *'
' 表示。每一個運算元都是一個正整數( ≤ 100),運算元和運算子之間不會有空白,一行算式不會有超過50 個運算元。
' 輸出說明:
' 相對於每一輸入算式,輸出所有可能運算結果的最大值。該值都會是一個正整數,而且不會超過2147483647。
' 輸入範例:
' 5*7+2
' 6*3-9*3
' 5+2-7*2-3
' 範例輸出:
' 45
' 27
' 14
Public Class Form1
Dim resultStr = ""
Dim str1 As String
Dim ans As Integer
Dim ans1 As Integer
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Me.Hide()
Dim fileContents As String
fileContents = My.Computer.FileSystem.ReadAllText(Application.StartupPath & "\Test5.txt")
Dim recArray() = Split(fileContents, vbNewLine)
Dim recIndex = 0
While recArray(recIndex) <> ""
Dim str1 = recArray(recIndex)
proc_one_rec(str1)
recIndex = recIndex + 1
End While
MsgBox(resultStr)
'My.Computer.FileSystem.WriteAllText(Application.StartupPath & "\result5.txt", resultStr, False)
End
End Sub
Sub proc_one_rec(ByVal str1)
'由左而右
ans = Val(Mid(str1, 1, 1))
listStr(str1, 2)
'由右而左
ans1 = Val(Mid(str1, Len(str1), 1))
listStr1(str1, Len(str1) - 1)
Dim ansBig = IIf(ans > ans1, ans, ans1)
resultStr = resultStr & ansBig & vbNewLine
'MsgBox(ansBig & " " & ans & " " & ans1)
End Sub
Sub listStr(ByVal str1, ByVal n)
If n = Len(str1) - 1 Then
Dim op = Mid(str1, n, 1)
Dim opN = Mid(str1, n + 1, 1)
ans = Microsoft.VisualBasic.Switch(op = "+", ans + opN, op = "-", ans - opN, op = "*", ans * opN)
Else
Dim op = Mid(str1, n, 1)
Dim opN = Mid(str1, n + 1, 1)
ans = Microsoft.VisualBasic.Switch(op = "+", ans + opN, op = "-", ans - opN, op = "*", ans * opN)
listStr(str1, n + 2)
End If
End Sub
Sub listStr1(ByVal str1, ByVal n)
If n = 2 Then
Dim op = Mid(str1, n, 1)
Dim opN = Mid(str1, n - 1, 1)
ans1 = Microsoft.VisualBasic.Switch(op = "+", opN + ans1, op = "-", opN - ans1, op = "*", opN * ans1)
Else
Dim op = Mid(str1, n, 1)
Dim opN = Mid(str1, n - 1, 1)
ans1 = Microsoft.VisualBasic.Switch(op = "+", opN + ans1, op = "-", opN - ans1, op = "*", opN * ans1)
listStr1(str1, n - 2)
End If
End Sub
End Class
標籤雲
visual basic 2008
(157)
訊息分享
(111)
Visual Studio 2008
(64)
wpf
(37)
每日一句
(35)
cpp
(30)
python
(26)
Silverlight
(22)
C++
(18)
Network Security
(15)
全國技藝競竇
(14)
好文分享
(11)
.Net
(10)
Blogger
(10)
名詞解釋
(10)
研討會
(10)
Excel
(9)
書籍介紹
(9)
每日一小品
(9)
電腦黑白講
(8)
Visual Studio 201X
(7)
分享
(7)
網頁設計
(7)
CSS
(5)
Algorithm
(4)
Network
(3)
PHP
(3)
Access
(2)
SA
(2)
VB.Net
(2)
VBA
(2)
WireShark
(2)
Word
(2)
php html
(2)
其他好東東
(2)
分類整理
(2)
Asp.Net
(1)
Batch
(1)
Blockly
(1)
IT News
(1)
OpenAI
(1)
SE
(1)
W7
(1)
Writer
(1)
app inv2
(1)
dfs
(1)
vex vr sample
(1)
影像處理練習
(1)
黑白講
(1)
2008年11月28日 星期五
技藝競竇97年模擬試題參考答案 Q5
標籤:
全國技藝競竇,
訊息分享,
visual basic 2008
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言