奇安信春招 C/C++服务器开发 笔试

春招 3.24 下午
20道单选
涉及c++、操作系统、计算机网络、数据库、数据结构
10道不定项选择
涉及c++、操作系统、计算机网络、数据库、数据结构

c++数组指针 、内存管理、进程通信、ipv4数据报最大报文长度、数据库范式、性能优化、二叉树遍历计算、二分类查找次数、环境变量设置命令等等

2道编程(渣渣代码能力,麻烦大佬帮忙检查一下)
写的很不精简,vs上例子都能通过,通过率没有100%,不知道那儿出了问题,帮忙找找问题!!
1.老杜参加会议。一天多场会议,输入:会议时间表[起始时间、结束时间],输出:最多能参加几场会议。
#include<iostream>
#include<vector>
#include<string>
#include<map>
#include<algorithm>
#include<functional>
using namespace std;

void Times(vector<vector<int> >& v, int b, int& max) {
    // 找到最大会议次数
    // 如果这一场结束比起下一场始大,跳过,满足就加
    if (b == (v.size() - 1)) return;
    int t=0;
    for (int i = b, j = b; i < v.size() - 1; i++)
    {
        if (v[j][1] <= v[i + 1][0]) { t++; j++; }
    }
    max = max > t ? max : t;
    Times(v, b + 1, max);
}
int AttendMeetings(vector<vector<int> > & times) {
    int max = 0;
    Times(times, 0, max);
    return max;
    }
int main() {
   vector<vector<int> >times = { {9,11},{10,12},{14,16},{14,15} };// {{meeting1起始时间,结束时间},{meeting2起始时间,结束时间}}  cout << AttendMeetings(times);
}
2.求最大资产,输入:现有资金;物品种类:m; 每种物品 限购数量 ;每种物品当前价格;每种物品十天后的价格;输出:十天后的最大资产。
想着用贪心算法
#include<iostream>
#include<vector>
#include<string>
#include<map>
#include<algorithm>
#include<functional>
using namespace std;
int main() {
    //输入 :21 2 6 5 3 2 5 3
    //x 现有资金  m:物品种类 mnum:每种物品 限购数量 ;prinvenow:每种物品当前价格;princeafter:每种物品十天后的价格; //输出:十天后的最大资产。 33  int x, m,res=0;
    cin >> x >> m;
    vector<int> mnum(m), prinvenow(m), princeafter(m), getp(m);
    map<int, int>mp;
    for (int i = 0; i < m; i++)cin >> mnum[i];
    for (int i = 0; i < m; i++)cin >> prinvenow[i];
    for (int i = 0; i < m; i++) {
        cin >> princeafter[i]; getp[i]= princeafter[i] - prinvenow[i];
        auto it=mp.find(getp[i]);
        if(it==mp.end())mp[getp[i]] = i;
        else {
            mp[getp[i]] = prinvenow[it->second] < prinvenow[i] ? it->second : i;
        }
    }
    sort(getp.begin(), getp.end());
    
    for (int i = m - 1; i >= 0; i--)
    {
        int k = mp[getp[i]];
        int num = x / prinvenow[k];
        if (num > mnum[k]) num = mnum[k];
        int kk = princeafter[k] * num;
        x -= num*prinvenow[k];
        res += kk;
    }
    cout << res;
}

#奇安信##C++工程师##笔经#
全部评论
第一题类似https://leetcode-cn.com/problems/maximum-number-of-events-that-can-be-attended/
点赞 回复 分享
发布于 2021-03-24 18:04
????老乡
点赞 回复 分享
发布于 2021-03-24 20:18
第一个和你一样的解法,看了下leetcode的差不多原题 ,感觉是不是我没读懂题??
点赞 回复 分享
发布于 2021-03-24 22:21
HDU2037
点赞 回复 分享
发布于 2021-04-13 11:03

相关推荐

totoroyyw:千年老妖😂
投递华为等公司10个岗位
点赞 评论 收藏
分享
点赞 评论 收藏
分享
2 15 评论
分享
牛客网
牛客企业服务