美的笔试总结(软件开发,楼主cpp)

选择题有单选和多选,多选注意少选不得分。主要考察c++的相关理解,如智能指针,多态特性,新特性如auto,还有死锁的条件等。

编程题两道

第一道,搜金币,注意每次只能向右边或者向下,方向数组大小为2。

#include <functional>
#include <iostream>
using namespace std;
int map[1002][1002];
int main() {
    int n;
    cin >> n;
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= n; j++) {
            scanf("%d", &map[i][j]);
        }
    }

    int dx[4] = {1, 0};
    int dy[4] = {0, 1};
    long long ans = 0;
    function<void(int, int, long long)> search_map = [&](int i, int j, long long coins) {
        if (i < 1 || i > n || j < 1 || j > n || map[i][j] == -1) {
            ans = max(ans, coins);
            return;
        }
        int temp = map[i][j];
        coins += temp;
        map[i][j] = -1;
        for (int k = 0; k < 2; k++) {
            search_map(i + dx[k], j + dy[k], coins);
        }
        coins -= temp;
        map[i][j] = temp;
        return;
    };
    search_map(1, 1, 0);
    cout << ans << endl;
    return 0;
}

第二道 一个表头为 head 的单向链表, 链表每个节点里面存储了一个随机数,对于链表中任意三个相邻的节点,如果前两个节点的和等于第三个节点,我们认为该链表不够随机。为了去除这种不符合要求的数据,我们需要删除这三个节点中的中间那个节点。 个人思路 使用两个deque 其中一个作为窗口使用 不断读入数字 当窗口大小为3时开始判断 符合要求时 将队首弹出到辅助deque中 不符合要求时 在取回来继续判断即可。

#include <iostream>
#include <queue>
#include <stack>
using namespace std;

int main() {
    int temp = 0;
    deque<int> window;
    //用来保存window窗口塞满时的队首元素
    deque<int> prewindow;
    while (scanf("%d", &temp) != EOF) {
        window.push_back(temp);
        while (window.size() == 3) {
            if (window[0] + window[1] == window[2]) {
                // 记住此时的队首元素
                int front = window.front();
                // 记住此时的队尾元素
                int back = window.back();
                if (!prewindow.empty()) {
                    int help_back = prewindow.front();
                    prewindow.pop_front();
                    window.clear();
                    window.push_back(help_back);
                    window.push_back(front);
                    window.push_back(back);
                } else {
                    window.pop_back();
                    window.pop_back();
                    window.push_back(back);
                }
            } else {
                int front = window.front();
                window.pop_front();
                prewindow.push_back(front);
            }
        }
    }
    vector<int> ans;
    for (int i = 0; i < prewindow.size(); i++) {
        printf("%d ", prewindow[i]);
    }
    for (int i = 0; i < window.size(); i++) {
        printf("%d ", window[i]);
    }
    return 0;
}

全部评论

相关推荐

Webpack通过解析入口文件及其所依赖的其他模块,构建一个完整的依赖图,从而理清模块之间的依赖关系。具体的处理方式包括以下几个方面:https://www.nowcoder.com/issue/tutorial?zhuanlanId=Mg58Em&amp;uuid=ba06d8fbb87f45f7bf340c85dc4f0cc1模块解析:Webpack会根据配置的解析规则,解析模块的路径和文件类型。默认情况下,Webpack会按照特定的路径搜索规则来查找模块,可以通过配置文件指定更多的解析选项。Webpack支持解析各种类型的文件,如JavaScript、CSS、图片等,以及一些特殊的模块类型,如命名的&nbsp;AMD&nbsp;或&nbsp;CommonJS&nbsp;模块。加载器处理:Webpack在解析模块时,会根据模块的类型,使用相应的加载器来对模块进行预处理。加载器可以将模块进行编译、转译、压缩等操作。加载器可以串联使用,以处理多个模块,形成一个处理管道。其中,每个加载器负责对模块进行特定的处理,然后将处理结果传递给下一个加载器,直至最终的模块打包。依赖收集:在解析模块的过程中,Webpack会分析模块之间的依赖关系,并将这些依赖关系记录在依赖图中。通过静态分析的方式,Webpack可以在编译时就知道每个模块所依赖的其他模块,以及被哪些模块所引用。模块打包:依赖图中的模块经过加载器处理后,Webpack将根据配置使用优化策略来打包模块。例如,可以将多个模块的公共代码抽取出来,形成单独的代码块,以减少重复的代码。还可以进行代码分割,将不同功能或路由的代码分割成多个文件,以实现按需加载。通过以上的处理方式,Webpack能够准确地处理模块之间的依赖关系,构建出一个完整的依赖图,并最终将模块打包成一个或多个静态文件。这样,在浏览器中加载这些文件时,模块的依赖关系也会得到正确的处理。
点赞 评论 收藏
分享
点赞 评论 收藏
分享
4 11 评论
分享
牛客网
牛客企业服务