題目及參考解答 「下載」
2015年6月26日 星期五
資處程式 6/26 甄選(第5題)
解題參考:
'第5題 撲克牌(23點),A2~9TJQK分別代表1~13點,但A可換成10點,>23爆
Dim line() = Split(TextBox1.Text, vbNewLine)
Dim n As Integer = Val(line(0))
For i = 1 To n
Label1.Text &= vbCrLf
Dim line1 = line(i)
Dim m = line1.Length
Dim j As Integer
Dim sum = 0, ace = 0
For j = 2 To m Step 2
Dim c = Mid(line1, j, 1)
Select Case c
Case "2" To "9" : sum += Val(c)
Case "A"
sum += 1 '先以 1 點計
ace += 1 'Ace的張數
Case "T" : sum += 10
Case "J" : sum += 11
Case "Q" : sum += 12
Case "K" : sum += 13
End Select
Next
If (sum > 23) Then 'Ace算1點 也爆了
Label1.Text &= "F"
Else
While (ace > 0 And sum < 15) '有Ace而且換10點不會爆,就換1張
sum += 9
ace -= 1
End While
Label1.Text &= sum
End If
Next i
---------第5題 資料---
5
HTDJSACA Ans: 23
DJCQH3 Ans: F
HADAC2SA Ans: 23
H9SACJ Ans: 21
SADKCTH2 Ans: F
'第5題 撲克牌(23點),A2~9TJQK分別代表1~13點,但A可換成10點,>23爆
Dim line() = Split(TextBox1.Text, vbNewLine)
Dim n As Integer = Val(line(0))
For i = 1 To n
Label1.Text &= vbCrLf
Dim line1 = line(i)
Dim m = line1.Length
Dim j As Integer
Dim sum = 0, ace = 0
For j = 2 To m Step 2
Dim c = Mid(line1, j, 1)
Select Case c
Case "2" To "9" : sum += Val(c)
Case "A"
sum += 1 '先以 1 點計
ace += 1 'Ace的張數
Case "T" : sum += 10
Case "J" : sum += 11
Case "Q" : sum += 12
Case "K" : sum += 13
End Select
Next
If (sum > 23) Then 'Ace算1點 也爆了
Label1.Text &= "F"
Else
While (ace > 0 And sum < 15) '有Ace而且換10點不會爆,就換1張
sum += 9
ace -= 1
End While
Label1.Text &= sum
End If
Next i
---------第5題 資料---
5
HTDJSACA Ans: 23
DJCQH3 Ans: F
HADAC2SA Ans: 23
H9SACJ Ans: 21
SADKCTH2 Ans: F
資處程式 6/26 甄選(第4題)
'第4題 K進位轉十(補充k:2~9),給數字 k 及 一k進位的字串 ,算出十進位
值
Dim line() = Split(TextBox1.Text, vbNewLine)
Dim n As Integer = Val(line(0))
For i = 1 To n
Label1.Text &= vbCrLf
Dim k = Val(line(i * 2 - 1))
Dim line1 = line(i * 2)
Dim m = line1.Length
Dim j As Integer
Dim p = 1, sum = 0
For j = m To 1 Step -1
Dim c = Mid(line1, j, 1)
If c <> "0" Then sum += (Val(c) * p)
p *= k
Next
Label1.Text &= sum
Next i
---------第4題 資料---
5
2 1010101 Ans: 85
3 121201 Ans: 451
4 230230 Ans: 2860
5 43201 Ans: 2926
8 760530 Ans: 254296
值
Dim line() = Split(TextBox1.Text, vbNewLine)
Dim n As Integer = Val(line(0))
For i = 1 To n
Label1.Text &= vbCrLf
Dim k = Val(line(i * 2 - 1))
Dim line1 = line(i * 2)
Dim m = line1.Length
Dim j As Integer
Dim p = 1, sum = 0
For j = m To 1 Step -1
Dim c = Mid(line1, j, 1)
If c <> "0" Then sum += (Val(c) * p)
p *= k
Next
Label1.Text &= sum
Next i
---------第4題 資料---
5
2 1010101 Ans: 85
3 121201 Ans: 451
4 230230 Ans: 2860
5 43201 Ans: 2926
8 760530 Ans: 254296
資處程式 6/26 甄選(第3題)
參考程式碼
' 第3題 字串處理,一字串中只有大寫字母、數字並包含1個運算符號(+-*)之一,
' 符號左右的數字範圍為 1~999
Dim line() = Split(TextBox1.Text, vbNewLine)
Dim n As Integer = Val(line(0))
For i = 1 To n
Label1.Text &= vbCrLf
Dim line1 As String = line(i)
Dim m = line1.Length
Dim j As Integer
Dim num1 As String = "", num2 As String = "", op As String = ""
'將0~9串接至 Num1 ,直到出現 運算子 + - *
For j = 1 To m
Dim c = Mid(line1, j, 1)
If c >= "0" And c <= "9" Then
num1 += c '數字串接至 num1
ElseIf c = "+" Or c = "-" Or c = "*" Then
op = c
Exit For
End If
Next
Dim k = j ' 運算子出現的位置,從右邊1格開始往後,串接 Num2
For j = k + 1 To m
Dim c = Mid(line1, j, 1)
If c >= "0" And c <= "9" Then
num2 += c '數字串接至 num2
End If
Next
'依 op 符號來計算
Dim sum As Integer = num1
If op = "+" Then
sum += num2
ElseIf op = "-" Then
sum -= num2
Else
sum *= num2
End If
Label1.Text &= num1 & op & num2 & " = " & sum
Next i
---------第3題 資料---
5
1A3CF+HK42M6 Ans: 13+426 = 439
X56J0O*2I3 Ans: 560*23 = 12880
X56J0O-7P2I3 Ans: 560-723 = -163
K2J5K+L6D7F8JD Ans: 25+678 = 703
O1I2*EJ4FI5RL6K Ans: 12*456 = 5472
' 第3題 字串處理,一字串中只有大寫字母、數字並包含1個運算符號(+-*)之一,
' 符號左右的數字範圍為 1~999
Dim line() = Split(TextBox1.Text, vbNewLine)
Dim n As Integer = Val(line(0))
For i = 1 To n
Label1.Text &= vbCrLf
Dim line1 As String = line(i)
Dim m = line1.Length
Dim j As Integer
Dim num1 As String = "", num2 As String = "", op As String = ""
'將0~9串接至 Num1 ,直到出現 運算子 + - *
For j = 1 To m
Dim c = Mid(line1, j, 1)
If c >= "0" And c <= "9" Then
num1 += c '數字串接至 num1
ElseIf c = "+" Or c = "-" Or c = "*" Then
op = c
Exit For
End If
Next
Dim k = j ' 運算子出現的位置,從右邊1格開始往後,串接 Num2
For j = k + 1 To m
Dim c = Mid(line1, j, 1)
If c >= "0" And c <= "9" Then
num2 += c '數字串接至 num2
End If
Next
'依 op 符號來計算
Dim sum As Integer = num1
If op = "+" Then
sum += num2
ElseIf op = "-" Then
sum -= num2
Else
sum *= num2
End If
Label1.Text &= num1 & op & num2 & " = " & sum
Next i
---------第3題 資料---
5
1A3CF+HK42M6 Ans: 13+426 = 439
X56J0O*2I3 Ans: 560*23 = 12880
X56J0O-7P2I3 Ans: 560-723 = -163
K2J5K+L6D7F8JD Ans: 25+678 = 703
O1I2*EJ4FI5RL6K Ans: 12*456 = 5472
資處程式 6/26 甄選(第1題及第2題)
第1題:身份證檢查-1
N組輸入,每一組一行,為身份證的前9碼,最後少一碼為檢查碼,請輸出n行,各1數字為「檢查碼」
範例:T11266383
身份證第1碼:英文代號以下表轉換成數字
A=10 台北市 G=16 宜蘭縣
M=21 南投縣 S=26 高雄縣 Y=31 陽明山
B=11 台中市 H=17 桃園縣
N=22 彰化縣 T=27 屏東縣 Z=33 連江縣
C=12 基隆市 I=34 嘉義市*
O=35 新竹市* U=28 花蓮縣
D=13 台南市 J=18 新竹縣
P=23 雲林縣 V=29 台東縣
E=14 高雄市 K=19 苗栗縣
Q=24 嘉義縣 W=32 金門縣*
F=15 台北縣 L=20 台中縣
R=25 台南縣 X=30 澎湖縣
T轉成27 則和 sum = 2*1 + 7*9 接著8個數字各乘8~1 { 1*8+1*7+2*6+6*5+6*4+3*3+8*2+3*1}
所以 sum = 2*1 + 7*9 + 1*8+1*7+2*6+6*5+6*4+3*3+8*2+3*1 = 174 ,檢查碼即 sum除10的餘數 6
第2題:身份證檢查-2
身份證的驗證規則與第1題同,但所輸入的資料少了第1碼英文字,請問有哪幾個英文字可能是對的
範例:112663836,sum = a*1+b*9 + 1*8+1*7+2*6+6*5+6*4+3*3+8*2+3*1+6
,sum會被10整除
(a+9b+115) 若代入27:a=2,b=7 則sum=180是對的,則T可以
又若代入G(16):1+6*9+115 = 170亦可 ,也就是 a分別以1、2、3代入試即可得出
參考解答:
' 第1題 身份證檢查-1 ,少最後1碼(檢查碼),請算出檢查碼
Dim 英to數() = {10,11,12,13,14,15,16,17,34,18,19,20,21,22,35,23,24,25,26,27,28,29,32,30,31,32}
Dim line() = Split(TextBox1.Text, vbNewLine)
Dim n As Integer = Val(line(0))
For i = 1 To n
Label1.Text &= vbCrLf
Dim pid As String = line(i)
Dim num = 英to數(Asc(pid) - 65) '第1個字,查 英to數()陣列 A->10 , B->11 ... Z->32
Dim sum = (num \ 10) + (num Mod 10) * 9
For j = 2 To 9
sum += (Asc(Mid(pid, j, 1)) - 48) * (10 - j)
Next j
Label1.Text &= (10 - sum Mod 10)
Next i
---------第1題 資料---
5
T11266383 Ans: 6
M12345678 Ans: 9
Y12345678 Ans: 8
A22334455 Ans: 3
R10234567 Ans: 8
' 第2題 身份證檢查-2 ,少了第1碼(英文字),請算出可能的英文字母
Dim 數to英 As String = "ABCDEFGHJKLMNPQRSTUVXYWZIO"
Dim line() = Split(TextBox1.Text, vbNewLine)
Dim n As Integer = Val(line(0))
For i = 1 To n
Label1.Text &= vbCrLf
Dim pid As String = line(i)
For a = 1 To 3
Dim sum = a
For j = 1 To 8
sum += (Asc(Mid(pid, j, 1)) - 48) * (9 - j)
Next j
sum += Asc(Mid(pid, 9, 1)) - 48
Dim ans = a * 10 + sum Mod 10 - 9
If ans <= 35 Then Label1.Text &= Mid(數to英, ans, 1)
Next a
Next i
---------第2題 資料---
5
112663836 Ans: GT
108881111 Ans: GT
123456788 Ans: KLY
223344556 Ans: DQO
102345678 Ans: ER
2015年6月25日 星期四
P1D 6/26小考解說
一、
01題:12+8 = 20 { + 加 }
02題:12-8 = 4 { - 減 }
03題:12*8 = 96 { * 乘 }
04題:12/8 = 1.5 { / 除,可能會有小數 }
05題:-12^2 = -144 { ^ 次方,優先序在 - 之前,所以先算出144再加負號 }
06題:121^0.5 = 11 { 0.5次方即開平方,但只取正根 }
07題:21\4 = 5 { \ 整除求 商 , 21÷4 = 5餘1}
08題:31Mod4 = 3 { Mod 整除求 餘 , 31÷4 = 7餘3 }
09題:31.5\6.5 = 5 { \ 整除求 商左右先算出4捨6入的整數再除,即32÷6}
10題:31.5Mod6.5 = 5.5 { 找出最大的 a 使 31.5 - a*6.5 >=0 ,得a=4,求31.5 - 4*6.5即是}
{ 關係運算需在算術運算之後, 為真 True、為假 False }
{算術的優先序:括號先、 ^ 、 * , / 、\ 、 Mod 、 + , - }
11題:13<4 = False { <小於, 13<4為假 }
12題:3=3 = True { =等於, 3=3為真 }
13題:6<>6 = False { <>不等於, 6<>6 為假 }
14題:3>=5 = False { >= 大於或等於, 3>=5 為假 }
15題:3<=5 = True { <= 小於或等於, 3<=5 為真 }
{ 邏輯運算需在關係運算後,又先Not、再And、最後才 Or }
{ Not 真假相反、And(且)左右皆真才真、 Or(或)左右一真即真 }
16題:13>4 And 5>4 = True { 先算關係 → True And True :左右皆真}
17題:13<4 Or 5>4 = True { → False Or True :一真即真}
18題:3>=4 Or 5<=3 = False { → False Or False:無真所以為假}
19題:Not (-2^3 <= 16/2) = False { → Not ( -8 <= 8 ) → Not ( True ):真 的相反為 假}
20題:59.7 Mod 32.5/2 = 10.95 { 先/再mod → 59.7 Mod 16.25 → 59.7 - 3*16.25}
01題:12+8 = 20 { + 加 }
02題:12-8 = 4 { - 減 }
03題:12*8 = 96 { * 乘 }
04題:12/8 = 1.5 { / 除,可能會有小數 }
05題:-12^2 = -144 { ^ 次方,優先序在 - 之前,所以先算出144再加負號 }
06題:121^0.5 = 11 { 0.5次方即開平方,但只取正根 }
07題:21\4 = 5 { \ 整除求 商 , 21÷4 = 5餘1}
08題:31Mod4 = 3 { Mod 整除求 餘 , 31÷4 = 7餘3 }
09題:31.5\6.5 = 5 { \ 整除求 商左右先算出4捨6入的整數再除,即32÷6}
10題:31.5Mod6.5 = 5.5 { 找出最大的 a 使 31.5 - a*6.5 >=0 ,得a=4,求31.5 - 4*6.5即是}
{ 關係運算需在算術運算之後, 為真 True、為假 False }
{算術的優先序:括號先、 ^ 、 * , / 、\ 、 Mod 、 + , - }
11題:13<4 = False { <小於, 13<4為假 }
12題:3=3 = True { =等於, 3=3為真 }
13題:6<>6 = False { <>不等於, 6<>6 為假 }
14題:3>=5 = False { >= 大於或等於, 3>=5 為假 }
15題:3<=5 = True { <= 小於或等於, 3<=5 為真 }
{ 邏輯運算需在關係運算後,又先Not、再And、最後才 Or }
{ Not 真假相反、And(且)左右皆真才真、 Or(或)左右一真即真 }
16題:13>4 And 5>4 = True { 先算關係 → True And True :左右皆真}
17題:13<4 Or 5>4 = True { → False Or True :一真即真}
18題:3>=4 Or 5<=3 = False { → False Or False:無真所以為假}
19題:Not (-2^3 <= 16/2) = False { → Not ( -8 <= 8 ) → Not ( True ):真 的相反為 假}
20題:59.7 Mod 32.5/2 = 10.95 { 先/再mod → 59.7 Mod 16.25 → 59.7 - 3*16.25}
21題:3+35 Mod 30\50/8 = 3 { 先/ , \ , mod最後才+ → 3+ 35 Mod 30 \6.25→3+35 Mod 5→3+0 }
22題:"919" > "920"+"3-5"= False { 字串相加為串接 → "919" > "920+3-5" ,第1字同比第2字}
{字串的比較是比內碼、中文字>英文小寫>英文大寫>數字}
23題:"312"+4&3 = 3163 { &為將2資料串接為字串,但優先序在 + 之後 , 又}
{ 若有一數字與一字串相加會轉成數字相加,故→ "312"+4等於316,316 & 3等於 3163}
24題:7*5<3^2 +2 Or "Ab">"aB" = False { →35<11 Or "Ab">"aB" → False Or False}
二、
第1 題
Dim A,S
For A=11 to 123 Step 3
S=S+A ' 迴圈內 A變化為 11,14,17,....,122
Next A ' 當 A=125>123結束,不的加至 S
Debug.print("S= " & S & "A= " & A) { 印出 S= [S值] A= [A值] }
' 以上 11 ~ 122 項數共有 (122-11)÷3 +1 = 38
' 和 S = (11+122)÷2×項數 = 133÷2×38 = 2527
應印出: S=2527 A=125
第2題
Dim A,S
For A=123 to12 Step -3
S=S+A ' 迴圈內 A變化為 123,120,117,....,12
Next A ' 當 A=9 <12 結束,不的加至 S
Debug.print("S= " & S & "A= " & A)
' 以上 123 ~ 12 項數共有 (123-12)÷3 +1 = 38
' 和 S = (123+12)÷2×項數 = 135÷2×38 = 2565
應印出: S=2565 A=9
第3題
Dim A,S,C
For A = 11 to111 '增加值預設為1
If A mod 9 = 1 Then ' 迴圈內11~111只有符合的以會執行IF內指令
S= S+A ' 符合的 A有 19、28、…、109 皆加入 S
C=C+1 ' 每一個 C+1 ,即是算項數
End If
Next A
Debug.print("S= " & S & "C= " & C)
應印出: S=704 C=11
第4題
Dim A,S,C
For A=200 to100 Step 5 '增加值為正時 > 終值即結束,跳至 Next的下一指令
If A mod 17 =0 Then
S=S+A
C=C+1
Next A
Debug.print("S= " & S & "C = " & C)
22題:"919" > "920"+"3-5"= False { 字串相加為串接 → "919" > "920+3-5" ,第1字同比第2字}
{字串的比較是比內碼、中文字>英文小寫>英文大寫>數字}
23題:"312"+4&3 = 3163 { &為將2資料串接為字串,但優先序在 + 之後 , 又}
{ 若有一數字與一字串相加會轉成數字相加,故→ "312"+4等於316,316 & 3等於 3163}
24題:7*5<3^2 +2 Or "Ab">"aB" = False { →35<11 Or "Ab">"aB" → False Or False}
二、
第1 題
Dim A,S
For A=11 to 123 Step 3
S=S+A ' 迴圈內 A變化為 11,14,17,....,122
Next A ' 當 A=125>123結束,不的加至 S
Debug.print("S= " & S & "A= " & A) { 印出 S= [S值] A= [A值] }
' 以上 11 ~ 122 項數共有 (122-11)÷3 +1 = 38
' 和 S = (11+122)÷2×項數 = 133÷2×38 = 2527
應印出: S=2527 A=125
第2題
Dim A,S
For A=123 to12 Step -3
S=S+A ' 迴圈內 A變化為 123,120,117,....,12
Next A ' 當 A=9 <12 結束,不的加至 S
Debug.print("S= " & S & "A= " & A)
' 以上 123 ~ 12 項數共有 (123-12)÷3 +1 = 38
' 和 S = (123+12)÷2×項數 = 135÷2×38 = 2565
應印出: S=2565 A=9
Dim A,S,C
For A = 11 to111 '增加值預設為1
If A mod 9 = 1 Then ' 迴圈內11~111只有符合的以會執行IF內指令
S= S+A ' 符合的 A有 19、28、…、109 皆加入 S
C=C+1 ' 每一個 C+1 ,即是算項數
End If
Next A
Debug.print("S= " & S & "C= " & C)
應印出: S=704 C=11
第4題
Dim A,S,C
For A=200 to100 Step 5 '增加值為正時 > 終值即結束,跳至 Next的下一指令
If A mod 17 =0 Then
S=S+A
C=C+1
Next A
Debug.print("S= " & S & "C = " & C)
應印出: S=0 C=0 '註:但A已設為 200 哦
2015年6月23日 星期二
2015年6月20日 星期六
Z2A VB選手訓練題單
(01) 100-3-1 身份證 ,三題類似 參考檔案「100-M3 下載」
(02) 101-3-1 身份證 ,參考檔案「101-M3 下載」
(03) 102-4-1 身份證
(04) 100-1-1及-2 字串處理, 參考檔案「100-M1 下載」
(05) 101-1-1及-2 字串處理(計算字數) , 參考檔案「101-M1 下載」
(06) 102-1-1及-2 字串處理 , 參考檔案「102-M1 下載」
(07) 100-3-2 漢明碼 ,參考檔案同(1) 「100-M3 下載」
(08) 101-3-2 編碼 ,參考檔案「101-M3 下載」
(09) 101-4-1 進制轉換 ,參考檔案「 101-M4 下載 」
(10) 101-4-2 撲克牌21點 ,參考檔案「 101-M4 下載 」
(11) 100-4-2 找零錢 ,參考檔案「 100-M4 下載 」
(12) 102-3-1 質因數、最大公因數,參考檔案「 102-M3 _下載_ 」
(13) 100-4-1 撲克牌-富豪牌型,參考檔案 同(11) 「 100-M4 下載 」
(14) 102-4-2 撲克牌-(10)+(13)綜合
(15) 100-2-1 二維陣列的應用 ,參考檔案 「 100-M2 下載 」
練習依順序,愈前面的出題機率愈高
(02) 101-3-1 身份證 ,參考檔案「101-M3 下載」
(03) 102-4-1 身份證
(04) 100-1-1及-2 字串處理, 參考檔案「100-M1 下載」
(05) 101-1-1及-2 字串處理(計算字數) , 參考檔案「101-M1 下載」
(06) 102-1-1及-2 字串處理 , 參考檔案「102-M1 下載」
(07) 100-3-2 漢明碼 ,參考檔案同(1) 「100-M3 下載」
(08) 101-3-2 編碼 ,參考檔案「101-M3 下載」
(09) 101-4-1 進制轉換 ,參考檔案「 101-M4 下載 」
(10) 101-4-2 撲克牌21點 ,參考檔案「 101-M4 下載 」
(11) 100-4-2 找零錢 ,參考檔案「 100-M4 下載 」
(12) 102-3-1 質因數、最大公因數,參考檔案「 102-M3 _下載_ 」
(13) 100-4-1 撲克牌-富豪牌型,參考檔案 同(11) 「 100-M4 下載 」
(14) 102-4-2 撲克牌-(10)+(13)綜合
(15) 100-2-1 二維陣列的應用 ,參考檔案 「 100-M2 下載 」
練習依順序,愈前面的出題機率愈高