华为软件开发笔试-2020.4.15

题目链接

第一题

结果:AC

int main() {
    string str;
    map<string, int> m;
    cin >> str;
    string temp = "";
    bool flag = true;
    for (int i = 0; i < str.size(); ++i) {
        if ((str[i] <= 'z' && str[i] >= 'a') || (str[i] <= 'Z' && str[i] >= 'A') || str[i] == ',' || str[i] == '\0') {
            if (str[i] != ',') {
                if (flag == true) {
                    if (str[i] <= 'z' && str[i] >= 'a') {
                        cout << "error.0001" << endl;
                        return 0;
                    }
                    flag = false;
                }
                else {
                    if (str[i] <= 'Z' && str[i] >= 'A') {
                        cout << "error.0001" << endl;
                        return 0;
                    }
                }
                temp += str[i];
            }
            else if (str[i] == ',' || str[i] == '\0') {
                ++m[temp];
                temp = "";
                flag = true;
            }
        }
        else {
            cout << "error.0001" << endl;
            return 0;
        }
    }
    ++m[temp];
    int maxVal = -1;
    string maxStr;

    for (auto item : m) {
        if (item.second > maxVal) {
            maxStr = item.first;
            maxVal = item.second;
        }
    }

    vector<string> vec;
    for (auto item : m) {
        if (item.second == maxVal) {
            vec.emplace_back(item.first);
        }
    }
    sort(vec.begin(), vec.end());

    cout << vec[0] << endl;
    return 0;
}

第二题

结果: 75

int main() {
    string str, pattern;
    cin >> str;
    cin >> pattern;
    int strLen = str.size();
    int index = pattern.find(str);
    if (index == -1)
        cout << "FAIL" << endl;
    while (index < pattern.size()) {
        //pattern.substr(index+str.size()+1,)
        string subStr = pattern.substr(index + strLen, 7);
        //cout << subStr << endl;
        if (subStr == "[addr=0"){
        //if (pattern[index + strLen] == '[') {
            //cout << index << endl;
            int i = index + strLen + 6;
            string temp = "";
            bool flag = true;
            vector<string> print;
            while (i < pattern.size() && pattern[i] != ']') {
                if (pattern[i] == ',') {
                    //cout << temp << " ";
                    print.emplace_back(temp);
                    temp = "";
                    if (flag == true) {
                        i += 5;
                        flag = false;
                    }
                    else
                        i += 4;

                }
                else {
                    temp += pattern[i];
                }
                ++i;
            }
            for (int j = 0; j < print.size(); ++j)
                cout << print[j] << " ";
            cout << temp << "\r\n";
            index = i;
            //cout << endl;
        }
        else {
            int i = index + strLen;
            while (i < pattern.size() && pattern[i] != ']') {
                ++i;
            }
            index = i;
            //cout << pattern[i] << endl;
        }
        index = pattern.find(str, index);
    }

    return 0;
}

第三题

结果:30

#include <iostream>
#include <algorithm>
#include <string>
#include <vector>
#include <set>
#include <map>
using namespace std;

void dfs(int index, map<int, int> & stackSize, map<int, vector<int>>& m, vector<int> & res, int & temp) {
    if (m[index].empty()) {
        res.emplace_back(temp);
    }

    for (auto item : m[index]) {
        temp += stackSize[item];
        dfs(item, stackSize, m, res, temp);
        temp -= stackSize[item];
    }

}

//这个函数存在问题
/*
bool cycle(set<int> & s, int index, map<int, vector<int>> & m) {
    if (m[index].empty()) {
        return false;
    }
    for (auto item : m[index]) {
        if (s.find(item) != s.end())
            return true;
        s.insert(item);
        cycle(s, item, m);
        s.erase(item);
    }
    return false;
}*/

int main() {
    int n;
    cin >> n;
    vector<int> vec;
    int temp;
    for (int i = 0; i < n; ++i) {
        cin >> temp;
        vec.emplace_back(temp);
    }
    map<int, vector<int>> m;
    vector<int> num;
    map<int, int> stackSize;
    for (int i = 0; i < n; ++i) {
        int index;
        cin >> index;
        num.emplace_back(index);
        int s = -1;
        cin >> s;
        if (s == -1) {
            cout << "NA" << endl;
            return 0;
        }
        stackSize[index] = s;
        int t;
        vector<int> nums;
        for (int j = 0; j < vec[index - 1]; ++j) {
            cin >> t;
            nums.emplace_back(t);
        }
        m[index] = nums;
    }
    //for (int i = 0; i < 5; ++i)
    //    cout << stackSize[i] << endl;
    //for (int i = 0; i < 5; ++i) {
    //    for (int j = 0; j < m[i + 1].size(); ++j) {
    //        cout << m[i + 1][j] << " ";
    //    }
    //    cout << endl;
    //}
    vector<int> res;
    for (int i = 0; i < n; ++i) {
                /*
        set<int>s{num[i]};
        if (cycle(s, num[i], m)) {
            cout << "R" << endl;
            return 0;
        }*/
        if (!(m[i+1].empty()))
            dfs(num[i], stackSize, m, res, stackSize[i]);
    }
    int maxVal;
    for (int i = 0; i < res.size(); ++i)
        maxVal = max(maxVal, res[i]);
    cout << maxVal << endl;
    //    cout << res[i] << endl;
    return 0;
}
#华为笔试##华为##笔试题目#
全部评论
我看了眼日期,以为我穿越了。。。。。
点赞 回复 分享
发布于 2020-04-15 21:16

相关推荐

点赞 评论 收藏
分享
评论
5
13
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务