1 条题解
-
0
本题的核心在于根据给定的校验和计算规则,找出使校验和最后一位为零的缺失数字。具体步骤为:
- 确定 ID 号码中 “?” 的位置。
- 计算除 “?” 之外其他数字与对应因子乘积的和。
- 通过遍历 0 - 9 这 10 个数字,尝试填入 “?” 的位置,计算校验和,找到使校验和最后一位为零的数字。 代码:
#include <iostream> #include <string> using namespace std; // 计算校验和 int calculateChecksum(const string& id) { int factors[] = {9, 3, 7}; int checksum = 0; int factorIndex = 0; for (int i = id.size() - 1; i >= 0; --i) { if (isdigit(id[i])) { checksum += (id[i] - '0') * factors[factorIndex]; } factorIndex = (factorIndex + 1) % 3; } return checksum; } // 找到缺失的数字 string findMissingDigit(string id) { int missingIndex = id.find('?'); for (int digit = 0; digit <= 9; ++digit) { string newId = id; newId[missingIndex] = digit + '0'; int checksum = calculateChecksum(newId); if (checksum % 10 == 0) { return newId; } } return ""; } int main() { int numCases; cin >> numCases; for (int i = 1; i <= numCases; ++i) { string id; cin >> id; string correctId = findMissingDigit(id); cout << "Scenario #" << i << ":" << endl; cout << correctId << endl; cout << endl; } return 0; }
- 1
信息
- ID
- 1499
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 2
- 已通过
- 1
- 上传者