#40814: 解答 python 暴力解


n0970616056@gmail.com (CIOU-HE-CHEN)

學校 : 不指定學校
編號 : 273811
來源 : [111.253.1.171]
最後登入時間 :
2024-06-14 11:55:43
a054. 電話客服中心 -- 板橋高中教學題 | From: [27.247.62.93] | 發表日期 : 2024-06-13 22:21

解答

# 建立字母對應的數字字典 letter_to_number = { '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 } # 讀取輸入的後 9 碼 input_code = input().strip() # 儲存可能的字母 possible_letters = [] # 對每個可能的字母進行檢查 for letter, number in letter_to_number.items(): # 計算完整身份證號碼的檢查碼 full_number = [int(digit) for digit in str(number)] + [int(digit) for digit in input_code] weights = [1, 9, 8, 7, 6, 5, 4, 3, 2, 1] s = sum(full_number[i] * weights[i] for i in range(10)) check_digit = (10 - (s % 10)) % 10 # 如果計算出的檢查碼與輸入的最後一碼匹配,則該字母是可能的第一位字母 if check_digit == int(input_code[-1]): possible_letters.append(letter) # 將可能的字母按照字母順序輸出 possible_letters.sort() print("".join(possible_letters))

思路

要解決這個問題,我們可以按照以下步驟來實現: 1. 建立一個字典來存儲每個字母對應的數字。 2. 讀取輸入的後 9 碼。 3. 對每個可能的字母進行檢查,計算其完整身份證號碼的檢查碼。 4. 如果計算出的檢查碼與輸入的最後一碼匹配,則該字母是可能的第一位字母。 5. 將所有可能的字母按照字母順序輸出。 以下是Python程式碼實現: ```python # 建立字母對應的數字字典 letter_to_number = { '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 } # 讀取輸入的後 9 碼 input_code = input().strip() # 儲存可能的字母 possible_letters = [] # 對每個可能的字母進行檢查 for letter, number in letter_to_number.items(): # 計算完整身份證號碼的檢查碼 full_number = [int(digit) for digit in str(number)] + [int(digit) for digit in input_code] weights = [1, 9, 8, 7, 6, 5, 4, 3, 2, 1] s = sum(full_number[i] * weights[i] for i in range(10)) check_digit = (10 - (s % 10)) % 10 # 如果計算出的檢查碼與輸入的最後一碼匹配,則該字母是可能的第一位字母 if check_digit == int(input_code[-1]): possible_letters.append(letter) # 將可能的字母按照字母順序輸出 possible_letters.sort() print("".join(possible_letters)) ``` 這段程式碼首先建立了一個字典來存儲每個字母對應的數字,然後讀取輸入的後 9 碼。對每個可能的字母進行檢查,計算其完整身份證號碼的檢查碼。如果計算出的檢查碼與輸入的最後一碼匹配,則該字母是可能的第一位字母。最後,將所有可能的字母按照字母順序輸出。

 
ZeroJudge Forum