首页 > 20210807网易互娱笔试题
头像
陌小桑Vec
发布于 2021-08-07 22:22
+ 关注

20210807网易互娱笔试题

仅仅做出来了一道题,
题目一:查找符合规范的身份证号的数量有多少。
给出了身份证号的校验算法,我从网上搜到了效验规则,如下图

题目是身份证号第15-17位可能看不清了,可能一位看不清,也可能两位三位。问:符合校验规则的身份证号有多少种可能。

另外问一下有人知道网易互娱多少分能合格吗?

mark一下自己的代码,虽然感觉写的一般。

#include <iostream>
#include <unordered_map>
#include <vector>
using namespace std;

unordered_map<char, int> cimp = {
    {'1', 0},
    {'0', 1},
    {'X', 2},
    {'9', 3},
    {'8', 4},
    {'7', 5},
    {'6', 6},
    {'5', 7},
    {'4', 8},
    {'3', 9},
    {'2', 10}
};

int findnum (int& sum_, int& modNum_, vector<int>& param_) {
    int ans = 0;
    int n = param_.size();
    int maxNum = 0;
    if (n == 1) maxNum = 9;
    else if (n == 2) maxNum = 99;
    else if (n == 3) maxNum = 999;
    else return 0;
    int sumBak = sum_;
    for (int i = 0; i <= maxNum; ++i) {
        int k = i;
        int sumBak = sum_;
        for (int j = n - 1; j >= 0; --j) {
            sumBak += param_[j] * (k % 10);
            k /= 10;
        }
        if ((sumBak % 11) == modNum_) ans++;
    }
    return ans;
}


int main() {
    int n;
    array<int, 17> param = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2};
    cin >> n;
    
    if (n == 0) return 0;
    vector<string> input;
    for (int i = 0; i < n; ++i) {
        string id;
        cin >> id;
        input.push_back(id);
    }
    int sum = 0;
    int modNum = 0;
    vector<int> paramVec;
    for (int i = 0; i < n; ++i) {
        string in = input[i];
        sum = 0;
        paramVec.clear();
        for (int j = 0; j < 17; ++j) {
            if (isdigit(in[j])) {
                int temp = param[j] * (in[j] - '0');
                sum += temp;
            } else {
                paramVec.push_back(param[j]);
            }
        }
        char c = in[17];
        modNum = cimp[c];
        int ans = 0;
        ans = findnum (sum, modNum, paramVec);
        cout << ans << endl;
    }
    return 0;
}




全部评论

(2) 回帖
加载中...
话题 回帖

推荐话题

相关热帖

近期热帖

历年真题 真题热练榜 24小时
技术(软件)/信息技术类
查看全部

近期精华帖

热门推荐