a054. 電話客服中心
http://zerojudge.tw/ShowProblem?problemid=a054
內容 :
很多銀行及公司設立了電話客服中心來服務他們 的客戶。為了加速身分的查核,常常會要求打電話進來的客戶輸入他的身分證號碼。可是電話上只有數字鍵,要輸入身分證號碼的第一個字母有點麻煩,因此有的語 音系統會要求來電者輸入後 9 碼,再根據後 9 碼來推算可能的英文字母。
很多人都知道,身分證號碼的最後一碼是「檢查碼」,它是用前 9 碼所推算出來的,其推算的規則如下:
- 先依照下表將英文字母轉換為 2 位數字,再加上第 2 到第 9 位的 8 位數字一共有 10 位數字。
台北市 A 10 彰化縣 N 22
台中市 B 11 新竹市 O 35
基隆市 C 12 雲林縣 P 23
台南市 D 13 嘉義縣 Q 24
高雄市 E 14 台南縣 R 25
台北縣 F 15 高雄縣 S 26
宜蘭縣 G 16 屏東縣 T 27
桃園縣 H 17 花蓮縣 U 28
嘉義市 I 34 台東縣 V 29
新竹縣 J 18 金門縣 W 32
苗栗縣 K 19 澎湖縣 X 30
台中縣 L 20 陽明山 Y 31
南投縣 M 21 連江縣 Z 33 - 由左至右,第一位乘 1,第二位乘 9,第三位乘 8,第四位乘 7...,以此類推,最後一位乘 1。
- 求各位相對數字乘積的總和 s。
- 求 s 的個位數 m。
- 檢查碼 c = 10 - m 。
假設某人的身份證號碼前 9 碼為 F13024567,那麼他的最後一位檢查碼的計算過程如下:
F 1 3 0 2 4 5 6 71 5 1 3 0 2 4 5 6 7
×1 ×9 ×8 ×7 ×6 ×5 ×4 ×3 ×2 ×1
1 + 45 + 8 + 21 + 0 + 10 + 16 + 15 + 12 + 7 = 135檢查碼 = 10 - (135 % 10) = 5
根據上面的規則,A12345678、M12345678 和 W12345678 這三個號碼的檢查碼都是 9。因此,如果在電話上所輸入的後 9 碼是 123456789 時,它的第一位英文字母可能是 A,也可能是 M 或 W。
輸入說明
:
輸出說明
:
範例輸入 :
130245675 123456789
範例輸出 :
FS AMW
提示
:
出處
:
/**********************************************************************************/
/* Problem: a054 "電話客服中心" from 板橋高中教學題 */
/* Language: C */
/* Result: AC (6ms, 238KB) on ZeroJudge */
/* Author: morris1028 at 2011-06-10 13:56:09 */
/**********************************************************************************/
#include<stdio.h>
main() {
char id[27][3] = {
"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",
"33"};
char s[10];
while(scanf("%s", s) == 1) {
int sum = 0, a;
for(a = 0; a < 8; a++)
sum += (s[a]-48) * (8-a);
s[8] = (s[8] == '0') ? 10 + '0': s[8];
for(a = 0; a < 26; a++)
if(10 - (sum + id[a][0] - '0' + (id[a][1] - '0')*9)%10 == (s[8] - '0'))
printf("%c", a+'A');
puts("");
}
return 0;
}
上一篇:a144. 整數分拆
下一篇:d769. 共有多少種走法?
原本還以為要用甚麼方法倒推回去!!
沒想到只要省下第一個計算過程,然後利用同餘代入26個數字就能過了
c = 0太邪惡了