熱門文章

2025年6月30日 星期一

ZeroJudge 解題筆記:a020. 身分證檢驗

作者:王一哲
日期:2025年6月30日


ZeroJudge 題目連結:a020. 身分證檢驗

解題想法


英文字母轉換成整數的部分沒有固定的規律,用字典儲存對照會比較簡單。

Python 程式碼


使用時間約為 20 ms,記憶體約為 3.3 MB,通過測試。
letter = {"A": 10, "B": 11, "C": 12, "D": 13, "E": 14, "F": 15,
          "G": 16, "H": 17, "I": 34, "J": 18, "K": 19, "L": 20,
          "M": 21, "N": 22, "O": 35, "P": 23, "Q": 24, "R": 25,
          "S": 26, "T": 27, "U": 28, "V": 29, "W": 32, "X": 30,
          "Y": 31, "Z": 33}

s = input()
first = letter[s[0]]
code = first//10 + first%10*9
for i, c in enumerate(s[1:9], start=1): code += int(c)*(9-i)
code += int(s[-1])
print("real" if code%10 == 0 else "fake")


C++ 程式碼


使用時間約為 2 ms,記憶體約為 352 kB,通過測試。
#include <iostream>
#include <string>
#include <map>
using namespace std;

int main() {
	ios::sync_with_stdio(0); cin.tie(0);
    map<char, int> letter = 
        {{'A', 10}, {'B', 11}, {'C', 12}, {'D', 13}, {'E', 14}, {'F', 15}, 
         {'G', 16}, {'H', 17}, {'I', 34}, {'J', 18}, {'K', 19}, {'L', 20},
         {'M', 21}, {'N', 22}, {'O', 35}, {'P', 23}, {'Q', 24}, {'R', 25},
         {'S', 26}, {'T', 27}, {'U', 28}, {'V', 29}, {'W', 32}, {'X', 30},
         {'Y', 31}, {'Z', 33}};
    string s; cin >> s;
    int num = letter[s[0]];
    int code = num/10 + num%10*9;
    for(int i=1; i<9; i++) code += (s[i]-'0')*(9-i);
    code += s.back()-'0';
    cout << (code%10 == 0 ? "real\n" : "fake\n");
    return 0;
}


沒有留言:

張貼留言