參考解
Function M4P12(ByVal s As String) As String
' M4P12_N!尾數的0
Dim x As Integer = s
Dim cnt As Integer = 0
For i = 5 To x Step 5
Dim k As Integer = i
Do While k Mod 5 = 0 ' 5的次方數會被整除多次
cnt += 1
k \= 5
Loop
Next
Return cnt '1~x 共被5整除幾次就有幾個 尾數0
End Function
Function M4P21(ByVal s As String) As String
' M4P21_計程車費率計算
Dim x As Integer = s * 1000 - 1500 '扣掉起跳 1500公尺
Dim ans As Integer = 85 '起跳 85元
If x < 0 Then Return ans '小於1500公尺只收 85
ans += 5 * (x \ 250)
If x Mod 250 <> 0 Then ans += 5
Return ans ' 超過1500公尺的 \250每單位5元,餘數不為0再+5元
End Function
Function M4P22(ByVal s As String) As String
' M4P22_迴文
Dim n As Integer = s.Length '字串長度
Dim m As Integer = n \ 2 '字串長度的一半
'由第1字與最後1字比,第2字與倒數第2字比, … 第m字與倒數第m字比
For i = 1 To m
If Mid(s, i, 1) <> Mid(s, n - i + 1, 1) Then Return "N"
Next
Return "Y" ' 皆沒有不同,即是迴文
End Function
Private Sub Button4_Click( . . .) Handles Button4.Click
' F4P11_電梯電費計算系統 ,輸入有兩列,以兩個文字方塊讀入s1,s2
Dim s1 As String = TextBox1.Text '例:7
Dim s2 As String = TextBox2.Text '例:2,9,7,3,4,6,1
Label1.Text = F4P11(s1, s2)
End Sub
Function F4P11(ByVal s1 As String, ByVal s2 As String) As String
' F4P11_電梯電費計算系統
Dim x As Integer = s1 '共停過x個樓層
Dim dat() = s2.Split(",") '有哪幾層以,號隔開:split切好分成dat(0)~dat(x-1)
Dim ans As Integer = 0
For i = 1 To x - 1
Dim f As Integer = dat(i)
If f > dat(i - 1) Then
ans += 20 * (f - dat(i - 1))
Else
ans += 10 * (dat(i - 1) - f)
End If
Next
Return ans
End Function
Function F4P22(ByVal s As String) As String
' F4P22_最大公約數計算
Dim dat() = s.Split(",") ' '共有以,號隔開不一定幾個[假設m個]的數字:split切好分成dat(0)~dat(m-1)
Dim m As Integer = dat.Length
Dim ans As Integer = dat(0)
For i = 1 To m - 1
ans = gcd(ans, dat(i))
Next
Return ans
End Function
Function gcd(ByVal a As Integer, ByVal b As Integer) As Integer
'求兩個非0正整數a,b的最大公約數, 運算後 更新後的 b即是
Dim r As Integer = a Mod b
Do Until r = 0
a = b
b = r
r = a Mod b
Loop
Return b
End Function
Function F4P31(ByVal s As String) As String
' F4P31_計算位元為1的個數
Dim x As Integer = s
Dim cnt As Integer = 0 '位元1有幾個
Do Until x = 0
cnt += x Mod 2
x \= 2
Loop
Return cnt ' 除2的餘數為1 加入 cnt
End Function
Function M5P42(ByVal s As String) As String
' M5P42_十進制數轉二進制數
Dim dat() = s.Split(",")
dat(0) = StrReverse(dat(0)) ' 或 Strings.StrReverse 將字串內容反轉
dat(1) = StrReverse(dat(1))
Dim x As Integer = dat(0), y As Integer = dat(1)
Dim sum As Integer = StrReverse(x + y)
Dim ans As String = ""
' 以下將 sum轉為 二進制,每除2一次的餘數串在前面
Do While sum <> 0
ans = sum Mod 2 & ans
sum \= 2
Loop
Return ans
End Function
2017年1月26日 星期四
2017年1月2日 星期一
Z3A_Net 幻方參考
奇階幻方 產生的方式有多種,為了方便驗證,我們規定
(1) 由最上面列的中間格開始填入1
(2) 接續格在前一格的左上方{例如 4填入後填5時},除非超出邊界或格內已填數字如說明(3)(4)(5)(6)
(3) 超出上邊界,則接續格改為左邊一行的最下一列{例如 1填入後填2時},除非超出左邊界如說明(6)
(4) 超出左邊界,則接續格改為上邊一列的最右一行{例如 2填入後填3時},除非超出上邊界如說明(6)
(5) 若接續格已填有數字 {例如 3填入後要填4時} ,接續格改為原格下方一格
(6) 若上邊及左邊同時超出邊界時,接續格改為原格的下方一格{例如 6填入後要填7時}
以下為3x3的產生步驟
,以及3階及5的完成圖
4N階幻方: 產生的方式有多種,為了方便驗證,我們規定如下{以8階為例}
(1) 由最左上格開始填入1,接著往右填2至8,一列填滿後接著第2列第1格填9,直到填滿64格如下圖
(2) 每方形16格,分成4x4的子區域,每個子區域劃出對角線,將有劃線的數字 1 4 5 8 10 … 61 64 移出如下
(3) 將被移出的數字 1 4 5 8 10 … 61 64,由小至大倒著填入空格中如圖,最後填滿即完成
6階及4N+2階幻方: 產生的方式有多種,為了方便驗證,我們規定如下{以6,10階為例}
2017年1月1日 星期日
Z2A VB檢查碼+變化2,3
變化2:M5P05_2 書碼檢查(10碼)
給一組書碼,依下列檢查規則,若正確則輸出Yes,不正確則輸出No
(1) 書碼共10碼皆數字,非數字或長度不對則No
(2) 第1~9碼由左算第1碼為奇數位
所有奇數位*1、所有偶數位*3
所有奇數位*1、所有偶數位*3
(3) 第1~9位各乘上1或 3後加總後再加上第10位*1須能被10整除
in1.txt
2
1234567891
9876543215
|
in2.txt
2
2234567894
9976543211
|
out.txt
No
Yes
Yes
No
|
參考程式碼
Function M5P05_2(ByVal s As String) As String
M5P05_2 = "Yes"
If s.Length <> 10 Then Return
"No"
Dim sum As Integer = 0
For i = 1 To 10
If Mid(s, i, 1) < "0"
Or Mid(s, i, 1) > "9" Then Return "No"
Dim a As Integer = Val(Mid(s, i,
1))
Select Case i Mod 2
Case 1
sum += a * 1
Case 0
If i = 10 Then sum += a
Else sum += a * 3
End Select
Next
If sum Mod 10 <> 0 Then Return
"No"
End Function
變化3:M5P05_3 二信資處發票檢查
給一組二信資處合作社的發票,避免冒領獎金,依下列檢查規則,
若正確則輸出OK,不正確則輸出KO
若正確則輸出OK,不正確則輸出KO
(1) 發票號碼長度有可能7~9碼皆數字,非數字或長度不對則KO
(2) 第1,4,7碼*3、第2,5,8碼*2、第3,6,9碼*5,若無8,9碼當然不用乘
(3) 各碼分別乘上3,2,5後加總的和須能被7整除則OK否則KO
in1.txt
2
123456794
9876543
|
in2.txt
2
223456789
98765436
|
out.txt
OK
KO
KO
OK
|
參考程式碼
Function M5P05_3(ByVal s As String) As String
M5P05_3 = "OK"
If s.Length < 7 Or s.Length > 9
Then Return "KO"
Dim sum As Integer = 0
For i = 1 To s.Length
If Mid(s, i, 1) < "0"
Or Mid(s, i, 1) > "9" Then Return "KO"
Dim a As Integer = Val(Mid(s, i,
1))
Select Case i Mod 3
Case 1
sum += a * 3
Case 2
sum += a * 2
Case 0
sum += a * 5
End Select
Next
If sum Mod 7 <> 0 Then Return
"KO"
End Function
Z2A VB 檢查碼變化題
Z2A VB 01/03預訂考題 檢查碼之 變化
變化1:M5P05_1 學號檢查
給一組學號,依下列檢查規則,若正確則輸出Yes,不正確則輸出No
(1) 學號共6碼,長度不對則No
(2) 第1碼只能3~5
(3) 第2,3兩碼只能11~17的數字
(4) 第4,5,6三碼只能001~350的數字
in1.txt
2
4112A9
416123
|
in2.txt
2
511099
616123
|
out.txt
No
Yes
Yes
No
|
參考程式碼
Function M5P05_1(ByVal s As String) As String
M5P05_1
= "Yes"
If s.Length <> 6 Then Return
"No"
For i = 1 To s.Length
If Mid(s, i, 1) < "0"
Or Mid(s, i, 1) > "9" Then Return "No"
Next
Dim a As Integer = Val(Mid(s, 1, 1))
Dim b As Integer = Val(Mid(s, 2, 2))
Dim c As Integer = Val(Mid(s, 4, 3))
If a < 3 Or a > 5 Then Return
"No"
If b < 11 Or b > 17 Then Return
"No"
If c < 1 Or a > 350 Then Return
"No"
End Function
變化2:M5P05_2 書碼檢查(10碼)
給一組書碼,依下列檢查規則,若正確則輸出Yes,不正確則輸出No
(1) 書碼共10碼皆數字,非數字或長度不對則No
(2) 第1~9碼由左算第1碼為奇數位
所有奇數位*1、所有偶數位*3
所有奇數位*1、所有偶數位*3
(3) 第1~9位各乘上1或 3後加總後再加上第10位*1須能被10整除
變化3:M5P05_3 二信資處發票檢查
給一組二信資處合作社的發票,避免冒領獎金,依下列檢查規則,
若正確則輸出OK,不正確則輸出KO
若正確則輸出OK,不正確則輸出KO
(1) 發票號碼長度有可能7~9碼皆數字,非數字或長度不對則KO
(2) 第1,4,7碼*3、第2,5,8碼*2、第3,6,9碼*5,若無8,9碼當然不用乘
(3) 各碼分別乘上3,2,5後加總的和須能被7整除則OK否則KO
變化2、變化3 的資料及程式碼後補