百度2020校招C++/PHP研发工程师笔试卷(第一批)

单选:

下列关于图的说法正确的是(B)
A
线性表可以是空表,树可以是空树,图可以是空图;
B
某有向完全图含有含有20条边,则该有向完全图具有5个顶点;
C
极大联通子图要求保持图的联通性,还要求子图的边数最少;
D
强连通分量仅针对无向图而言,对于有向图仅讨论图的连通性;
2.
下列关于某无向图的说法中,错误的是(C)
A
若该图具有1024条边,且每个顶点的度数均为2,则其必有1024个顶点;
B
若该图具有1024条边,且该图具有1024个顶点,则该图中必定存在环;
C
若该图具有1024个顶点,且该图是一个环,则该图有1023棵生成树;
D
若该图具有1024个顶点,且该图是一个环,则该图有1024条边;
3.
设无向图G=(V,E),顶点集V={a,b,c,d,e,f,g,h},边集E={(a,b),(a,h),(a,e),(b,c),(b,d),(c,d),(c,h),(e,f),(e,g)},则下列选项中,不属于BFS序列的是(B)
A
eafgbhcd
B
abcdhefg
C
hcabdegf
D
dbcahefg
单选题
4.
分页存储管理将进程的逻辑地址空间分成若干个页,并为各页加以编号,从0开始,若某一计算机主存按字节编址,逻辑地址和物理地址都是32位,页表项大小为4字节,若使用一级页表的分页存储管理方式,逻辑地址结构为页号(20位),页内偏移量(12位),则页的大小是( A)字节?页表最大占用( )字节?
A
4KB,4MB
B
5KB,5MB
C
6KB,6MB
D
7KB,7MB
5.
对称矩阵是指元素以主对角线为对称轴对应相等的矩阵,对称矩阵是一个方形矩阵,其转置矩阵和自身相等,设矩阵A是一个对称矩阵,为了节省存储空间,将其下三角部分按照行优先存放在一维数组B[0,…n(n+1)/2-1]中,对于下三角部分中的任一元素ai,j(i大于等于j,i和j从1开始取值),在一维数组B中的下标K的值是( A)。
A
i(i-1)/2+j-1
B
i(i+1)/2+j
C
i(i+1)/2+j-1
D
i(i-1)/2+j
6.
将一个整数序列整理为降序,两趟处理后序列变为{36, 31, 29, 14, 18, 19, 32}则采用的排序算法可能是___B_____。
A选择排序
B插入排序
C快速排序
D堆排序
7.
数据结构中,二分法的查找主要应用于数据量较大情况下的查找,但是数据需要先排好顺序,在顺序表(2,5,7,10,14,15,18,23,35,41,52)中,用二分法查找12,所需的关键码比较的次数为多少( C )?
A 2
B 3
C 4
D 5
8.
设a数组的长度为N,那么下面程序循环内交换数组元素的代码执行的时间复杂度最坏为?(B)

	for (int i = N - 1; i > 1; i--)
{
    for (int j = 1; j < i; j++)
    {
        if (a[j] > a[j + 1])
        {
            temp = a[j + 1];
            a[j + 1] = a[j];
            a[j] = temp;
        }
    }
}

A O(N)
B O(N平方)
C O(N立方)
D O(Nlog2N)
E O(N平方log2N)
9.
linux下可以查看网卡流量情况的是 D
A ps
B flow
C network
D nload
10.
php中如果想查看某个表达式的值和类型,可以用_D__?
A echo()
B print_r()
C var_export()
D var_dump()

多选题

关于内存管理,下面说法不正确的是?AC
A
编译后,每个目标模块都从0单元开始编址,称为该模块的物理地址
B
物理地址空间是指内存中物理单元的集合,他是地址转换的最终地址,进程在运行时执行指令和访问数据最后都要通过物理地址来存取主存
C
分页的思想是:把主存空间划分为大小相等且固定的块,每个线程以块为单位进行划分
D
段式管理方式按照用户进程中的自然段划分逻辑空间
12.
C++代码如下:

struct A
{
int xmin;
int xmax;
int ymin;
int ymax;
};
struct B: public A
{
double classid;
};

那么A,B的对象分别可以使用几个成员变量 BC
A 1
B 4
C 5
D 不确定
13.
下面关于c++线程安全说法正确的有? BCD
A
std::string是保证线程安全的
B
若每个线程中对全局变量,只有读操作,而无写操作,那么这个全局变量是线程安全的
C
使用局部变量是线程安全的
D
函数里静态变量多线程读写是不安全的
14.
关于下面C++11的std::shared_ptr说法正确的有? ACD

struct Test{};
std::shared_ptr<test> p1 = std::make_shared<test>();//1</test></test>
std::shared_ptr<test> p2 (new Test);//2</test>

A
上面的代码1语句只会进行1次内存申请,2语句则会2次内存申请
B
使用new申请内存方式不会造成内存泄漏
C
构造函数是保护或私有时,无法直接使用 make_shared
D
使用 make_shared,对象的内存可能无法及时回收
E
如果可以,最好把一个原生指针给多个shared_ptr管理,节省内存分配的资源
15.
有以下C++代码,那么横线可以填什么可以让printMax输出最大值? A

#include <iostream>
int max(int a, int b)
{
    if (a>b)
    {
        return a;
    }
    return b;
}
void printMax(_____, int a, int b)
{
    std::cout << (*p)(a, b) << std::endl;
}
int main() {
    printMax(p,1,2);
    return 0;
}

A
填什么都会编译报错
B
int (*p)(int,int)
C
int p(int,int)
D
int max(int,int)
E
int *p(int,int)
16.
下列选项中,关于HTTP与HTTPS的区别的描述中,正确的是( ABC ):
A
http是超文本传输协议,信息是明文传输。https则是具有安全性的ssl加密传输协议。
B
http和https使用的是完全不同的连接方式,用的端口也不一样。
C
http的连接很简单,是无状态的。HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
D
http默认使用80端口,https默认使用403端口。
多选题
17.
用下面哪些SQL语句可以从table中得到每门课都大于80分的学生姓名,下面说法正确的的? AD
name course fenshu
小张 语文 81
小张 数学 75
小李 语文 76
小李 数学 90
小王 语文 81
小王 数学 100
小王 英语 90
A
select distinct a.name from table a left join (select distinct name from table where fenshu <= 80) b on a.name=b.name where b.name is null;
B
select name from table where fenshu > 80 group by name having cnt > 0;
C
select distinct name from table where name in (select distinct name from table where fenshu > 80)
D
select name,sum(case when fenshu<=80 then 1 else 0 end) scr from table group by name having scr=0;
18.
关于抽象工厂模式的说法正确的有(ACD)
A
抽象工厂模式隔离了具体类的生成,使得客户不需要知道什么被创建
B
抽象工厂是结构型模式
C
增加新的具体工厂和产品族很方便,无须修改已有系统,符合开闭原则
D
添加新的产品类时,难于扩展抽象工厂来生产新种类的产品
19.
如果存储结构由数组变为链表,那么下列哪些算法的时间复杂度量级会升高 BC
A
选择排序
B
希尔排序
C
堆排序
D
插入排序
20.
有一个日志文件Test.txt,其中每行的内容是服务器的mac地址,下面哪个命令可以找到次数最多的前5个mac和出现的次数 BC
A
cat Test.txt | count -n | sort -rn | head -n 5
B
sort Test.txt | uniq -c | sort -rn | head -n 5
C
cat Test.txt | sort | uniq -c | sort -rn | head -n 5
D
uniq -c Test.txt | sort -nr | top -n 5

编程题:

21.小度买果汁
小度和同事们一起去春游,天气炎热,小度自告奋勇去给大家买果汁。
员工一共有n名(包括小度), 果汁一共有k种,第i位员工每个人都有自己最喜欢的一种果汁a^i 。
小度到达果汁商店的时候,被告知商店正在举行促销活动,全场果汁买一送一(购买一瓶i型果汁,再赠送一瓶i型果汁)。
小度想让所有人(包括小度)都拿到他们最喜欢的果汁,需要购买多少瓶呢?

#include<iostream>
#include<map>
using namespace std;

int main(){
    int people,juice;
    int key;
    int ans=0;
    cin>>people>>juice;
    map<int,int> like;
    map<int,int>::iterator it;
    while(cin>>key){
        it=like.find(key);
        if(it!=like.end()){
            it->second++;
        }
        else{
            like.insert(make_pair(key, 1));
        }
    }
    for(it=like.begin();it!=like.end();it++){
        if(it->second%2==0){
            ans=ans+it->second/2;
        }
        else{
            ans=ans+it->second/2+1;
        }
    }
    cout<<ans;
    
}

22.发工资
小度新聘请了一名员工牛牛, 每个月小度需要给牛牛至少发放m元工资(给牛牛发放的工资可以等于m元或者大于m元, 不能低于m)。小度有一些钞票资金, 一共有n种不同的面额, 对于面额为x^i 的钞票, 小度有y^i张, 并且每一个钞票面额都能整除所有比它大的面额, 并且每一张钞票不能找零。
小度想知道这部分资金最多能牛牛发放多少个月的工资?

#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<queue>
using namespace std;
const int N = 100010;
struct Money {
    int x, y;
    bool operator < (const Money e) const {
        return x < e.x;
    }
} money[N];
int main() {
    ios::sync_with_stdio(false);
    int n, m;
    cin >> n >> m;
    for (int i = 0; i < n; ++i)
        cin >> money[i].x >> money[i].y;
    sort(money, money + n);
    int ans = 0;
    while (1) {
        int need, rest = m;
        for (int i = n - 1; i >= 0; --i) {
            if (money[i].y == 0) continue;
            need = rest / money[i].x;
            if (need > money[i].y) need = money[i].y;
            money[i].y -= need;
            rest -= need * money[i].x;
            if (rest == 0) break;
        }
        //不能凑齐m,优先用小额的钱去补
        if (rest != 0) {
            for (int i = 0; i < n; ++i) {
                if (money[i].y == 0) continue;
                need = rest / money[i].x + 1;
                if (need > money[i].y) need = money[i].y;
                money[i].y -= need;
                rest -= need * money[i].x;
                if (rest <= 0) break;
            }
        }
        if (rest > 0) break;
        ans++;
    }
    cout << ans << endl;
    return 0;
}

23.摆火柴
牛牛给了小度n根火柴和m种数字(m只能是1到9),小度只能摆这m种数字,小度想知道能摆出来最大的数的多少。
在这里插入图片描述
如图所示: 摆数字1,2,3,4,5,6,7,8,9 分别需要花费 2,5,5,4,5,6,3,7,6根火柴

#include <iostream>
#include <vector>
using namespace std;
 
const vector<int> fate = { 0, 2, 5, 5, 4, 5, 6, 3, 7, 6 };
 
int comp(string s1, string s2)
{
    if (s1.size() > s2.size())
    {
        return 1;
    }
    else if (s1.size() < s2.size())
    {
        return -1;
    }
    else
    {
        return s1.compare(s2);;
    }
     
}
 
int main()
{
    int n, m;
    cin >> n >> m;
    vector<int> set(m);
    for (int i = 0; i < m; ++i)
        cin >> set[i];
 
    vector<string> dp(n + 1, "");
    for (int i = 2; i < n + 1; ++i)
    {
        for (int j = 0; j < m; ++j)
        {
            if (i >= fate[set[j]])
            {
                if (dp[i - fate[set[j]]] != "" || i == fate[set[j]])
                {
                    string ns = dp[i - fate[set[j]]] + (char)(set[j] + '0');
                    int ret = comp(dp[i], ns);
                    if (ret < 0) dp[i] = ns;
                }
            }
 
        }
    }
    cout << dp[n] << endl;
 
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值