日期:2025年7月1日
ZeroJudge 題目連結:a054. 電話客服中心
解題想法
先取英文字母對應的兩位數字,第1位加上第2位乘以9,再取個位數相同的放一起,存到一個對應的陣列之中。依照規則計算數字部分的編碼 code,加上英文字母對應的值要能被 10 整除,因此答案就是 (10 - code%10) % 10 對應的字母。
Python 程式碼
使用時間約為 19 ms,記憶體約為 3.3 MB,通過測試。
# 英文字母對應的兩位數字,第1位加上第2位乘以9,再取個位數相同的放一起
letters = ("BNZ", "AMW", "KLY", "JVX", "HU", "GT", "FS", "ER", "DOQ", "CIP")
s = input() # 身分證字號
# 依照規則計算數字部分的編碼,加上英文字母對應的值要能被 10 整除
code = sum(int(c)*(8-i) for i, c in enumerate(s[:9])) + int(s[-1])
print(letters[(10 - code%10) % 10])
C++ 程式碼
使用時間約為 2 ms,記憶體約為 352 kB,通過測試。
#include <iostream>
#include <string>
using namespace std;
int main() {
ios::sync_with_stdio(0); cin.tie(0);
// 英文字母對應的兩位數字,第1位加上第2位乘以9,再取個位數相同的放一起
string letters[10] = {"BNZ", "AMW", "KLY", "JVX", "HU",
"GT", "FS", "ER", "DOQ", "CIP"};
string s; cin >> s; // 身分證字號
// 依照規則計算數字部分的編碼,加上英文字母對應的值要能被 10 整除
int code = 0;
for(int i=0; i<9; i++) code += (s[i]-'0')*(8-i);
code += s.back() - '0';
cout << letters[(10 - code%10) % 10] << "\n";
return 0;
}
沒有留言:
張貼留言