首页 > 完美世界笔试9.7 C++B
头像
被问的怀疑人生
编辑于 2021-09-07 21:48
+ 关注

完美世界笔试9.7 C++B

第一题:
买股票的题:
不知为何,就是90???xdm哪里有问题啊帮看看
#include <vector>
#include <iostream>
#include <algorithm>

int best_deal(std::vector<int>& vec) {
    //write code here
    int size = vec.size();
    int max = 0;
    int num = 0;
    for (int i = 1; i < size; i++) {
        num += (vec[i] - vec[i - 1]);
        if (num > max) {
            max = num;
        }if (num < 0) {
            num = 0;
        }
    }
    return max;
}

int main(int argc, char* argv[]) {
    std::vector<int> vec;
    int n = 0;
    std::cin >> n;
    vec.resize(n);
    for (int i = 0; i < n; i++)
        std::cin >> vec[i];
    int r = best_deal(vec);
    std::cout << r << std::endl;
    return 0;
}



2:
二叉树转序


3:第三题解压缩的
就杠杠递归~~~递归到最里层,然后按照压缩的次数还原
"abc[3,de[2,gg]f]abc"
[  ] 之间的展开
2,gg ->gggg
[3,de[2,gg]f]->deggggfdeggggfdeggggf
abc[3,de[2,gg]f]abc->abcdeggggfdeggggfdeggggfabc
#include <iostream>
#include <string>
using namespace std;
int first = 1;
string dg(string s) {
    bool flag = 0;
    
    for (int i = 0; i < s.size(); i++) {
        if (s[i] == '[' || s[i] == ']') {
            //没结束还要继续递归
            flag = 1;
            break;
        }
    }
    string S;
    int L=0, R=0;
    if (flag == 0) {
        int N = s[0] - '0';
        string temp(s.begin() + 2, s.end());
        while (N--) {
            S.append(temp);
        }
        return S;
    }
    else {

        for (int i = 0; i < s.size(); i++) {
            if (s[i] == '[') {
                L = i;break;
            }
        }
        for (int i = s.size() - 1; i >= 0; i--) {
            if (s[i] == ']') {
                R = i;break;
            }
        }
        if (first == 1) {
            first = 2;
            string l(s.begin(), s.begin() + L);
            string r(s.begin() + R + 1, s.end());
            string t(s.begin() + L + 1, s.begin() + R);
           
            string tmp = dg(t);
            S.append(l + tmp + r);
            return S;
        }
        else {
            string l(s.begin()+2, s.begin() + L);
            string r(s.begin() + R + 1, s.end());
            string t(s.begin() + L + 1, s.begin() + R);
            int N = s[0] - '0';
            string tmp = dg(t);
            while (N--) {
                S.append(l + tmp + r);
            }
            return S;
        }
    }
}


//TODO需要实现
void extract(std::string& in, std::string& out)
{
    out = dg(in);
    cout << out;//
}

//摘要(hash)算法,已经实现
unsigned make_hash(std::string& str)
{
    int step = str.size() / 100;
    if (step == 0)
        step = 1;
    unsigned hash = 0;
    unsigned seed = 131;
    for (int i = 0; i < str.size(); i += step)
    {
        hash = hash * seed + (int)str[i];
    }
    return hash;
}

//main,已经实现
int main()
{
    std::string in, out;
    //cin >> in;
    in = "abc[3,de[2,gg]f]abc";
    extract(in, out);
    cout << make_hash(out) << endl;
}  
不知道对不对,例子应该是A了
或者大佬有做了评论区分享下代码,弟弟学习一下~
感觉差不多吧,渣渣谢了两道,已经尽力的。
那个树的,要自己手写结构,力不从心,就没做了~


最后的也就15*0.9+25*0.2估计笔试是凉了。
唉,许愿赐我一个面试吧~

全部评论

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