ZJ a020
題目
https://zerojudge.tw/ShowProblem?problemid=a020
給一個身分證字號,求是否符合身份證字號的規則,其規則如下:
- 先依照表格,將英文字母對應到數字 1 
 2
 3
 4
 5
 6
 7
 8
 9A=10 台北市 J=18 新竹縣 S=26 高雄縣 
 B=11 台中市 K=19 苗栗縣 T=27 屏東縣
 C=12 基隆市 L=20 台中縣 U=28 花蓮縣
 D=13 台南市 M=21 南投縣 V=29 台東縣
 E=14 高雄市 N=22 彰化縣 W=32 金門縣
 F=15 台北縣 O=35 新竹市 X=30 澎湖縣
 G=16 宜蘭縣 P=23 雲林縣 Y=31 陽明山
 H=17 桃園縣 Q=24 嘉義縣 Z=33 連江縣
 I=34 嘉義市 R=25 台南縣
- 將第 1 步得到的數字的十位數以及個位數乘上 9 的值記錄下來為 $n$
- 數字從最左邊到最右邊依序乘上 8, 7, 6, … ,2, 1 ,並相加記錄下來為 $m$
- 若 $n+m$ 是 10 的倍數,表示正確,否則錯誤
若是正確的身分證輸出 real , 否則輸出 fake
想法
建立一個對照的表格(這裡以 function 實現),讓英文字能對應到相對的數字
接著做第 2 步驟,再判斷即可
建表稍微麻煩,但是只要用心就可以完成了
Code
| 1 | 
 | 
時間複雜度分析
由於字串的長度很小,並且每次計算的量值也很小,直接以 $O(1)$ 記之