美的笔试总结(软件开发,楼主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;
}

全部评论

相关推荐

在瑞幸干两年,奥特曼都得闪灯
不知名的牛友:奥特曼每天只上3分钟班
点赞 评论 收藏
分享
lllllkin:感觉可以精简到一页简历,有些排版感觉不是必须的。 时间线越早的,你自己越熟悉的放前面。描述可以更精简些,一些问题解决感觉可以不用写具体技术栈,卖个关子,等面试官问。
点赞 评论 收藏
分享
05-07 17:58
门头沟学院 Java
wuwuwuoow:1.简历字体有些怪怪的,用啥写的? 2.Redis 一主二从为什么能解决双写一致性? 3.乐观锁指的是 SQL 层面的库存判断?比如 stock > 0。个人认为这种不算乐观锁,更像是乐观锁的思想,写 SQL 避免不了悲观锁的 4.奖项证书如果不是 ACM,说实话没什么必要写 5.逻辑过期时间为什么能解决缓存击穿问题?逻辑过期指的是什么 其实也没什么多大要改的。海投吧
简历中的项目经历要怎么写
点赞 评论 收藏
分享
字节一直是我的白月光,考虑到转正还是拒了日常实习。
从今天开始狠狠卷JV...:为什么你释放的offer没流到我头上
点赞 评论 收藏
分享
评论
4
12
分享

创作者周榜

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