1 编程题
1. 整数无序数组求第K大数
给定无序整数序列,求其中第K大的数,例如{45,67,33,21},第2大数为45
输入描述:
输入第一行为整数序列,数字用空格分隔,如:45 67 33 21
输入第二行一个整数K,K在数组长度范围内,如:2
输出描述:
输出第K大的数,本例为第2大数:45
题目分析:首先对数组排序,然后找到第k大的数。
代码实现:
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main(){
vector<int>arr;
int k;
while(cin >> k){
arr.push_back(k);
}
sort(arr.begin(), arr.end() - 1);
cout << arr[arr.size() - k - 1] << endl;
return 0;
}
2. 给定整数序列求连续子串最大和
给定无序整数序列,求连续子串最大和,例如{-23 17 -7 11 -2 1 -34},子串为{17,-7,11},最大和为21
输入描述:
输入为整数序列,数字用空格分隔,如:-23 17 -7 11 -2 1 -34
输出描述:
输出为子序列的最大和:21
题目分析:通过两个变量来存储当前连续数组的和,另一个存储历史最大的连续数组的和。
代码实现:
#include <iostream>
#include <vector>
using namespace std;
int main(){
vector<int>arr;
int tmp;
while(cin >> tmp) arr.push_back(tmp);
int iCur = arr[0], iMax = arr[0];
for(int i = 1; i < arr.size(); i++){
if(iCur <= 0) iCur = arr[i];
else iCur += arr[i];
iMax = iMax > iCur ? iMax : iCur;
}
cout << iMax << endl;
return 0;
}
2 选择题
3. 有二十五匹速度各不相同的马来赛跑,一次只能跑五匹,每匹马每次跑的状态稳定,没有计时设备,那么请问:最少需要多少次才能找出跑得最快的三匹马
A. 6 B.7 C.8 D.11
正确答案:B
题目分析:首先将25匹马分为5批进行甄选,结果如下:(下面的每组结果均已分出快慢顺序,前面的最快)
第一组 a1 a2 a3 a4 a5
第
一
组
a
1
a
2
a
3
a
4
a
5
第二组 b1 b2 b3 b4 b5
第
二
组
b
1
b
2
b
3
b
4
b
5
第三组 c1 c2 c3 c4 c5
第
三
组
c
1
c
2
c
3
c
4
c
5
第四组 d1 d2 d3 d4 d5
第
四
组
d
1
d
2
d
3
d
4
d
5
第五组 e1 e2 e3 e4 e5
第
五
组
e
1
e
2
e
3
e
4
e
5
将以上五组中的最快的马取出组成第六组,
第六组 a1 b1 c1 d1 e1
第
六
组
a
1
b
1
c
1
d
1
e
1
此时最快的马已经确定为
a1
a
1
,且第二名与第三名的候选马分别为
a2,a3,b1,b2,c1
a
2
,
a
3
,
b
1
,
b
2
,
c
1
,因此将候选马作为第7组进行甄选,结果为:
第起组 a2 a3 b1 b2 c1
第
起
组
a
2
a
3
b
1
b
2
c
1
因此最少七次即可得出前三名马。
4. 每个飞机只有一个油箱,飞机之间可以相互加油(注意是相互,没有加油机),一箱油可供一架飞机绕地球飞半圈. 问:为使至少一架飞机绕地球一圈回到起飞时的飞机场,至少需要出动几架飞机? (所有飞机从同一机场起飞,而且必须安全返回机场,不允许中途降落,中间没有飞机场)
A. 3 B. 4 C.5 D. 6
正确答案:C
题目分析:将地球分为八格,如下图所示:
起初派出3架飞机a(4),b(4),c(4),其中4代表携带的油量可以飞行4格,到达下一格时各个飞机的状态为a(3),b(3),c(3),然后a(3)给b(3)c(3)各加能够飞行一个格的油量,a(-1),b(4),c(4),其中负号代表逆时针飞行,然后按照图示继续分析即可。
5. 房间里有8人,分别佩戴着从1号到8号的纪念章,任选3人记录其纪念章号码,最大的号码为6的概率()
A. 1/4 B. 9/28 C. 3/14 D. 5/28
正确答案:D
题目分析: 从8个人中选出三人一共有
C38=56
C
8
3
=
56
中情况;选出的三个人中最大号码是6的情况有
C11∗C25=10
C
1
1
∗
C
5
2
=
10
,所以概率为5/28
6. 小桔A和小桔B轮流在方桌上放硬币,规则是硬币不能互相覆盖,谁最后没有地方放为输,请问下面哪个答案正确
A. 后放者有必胜策略 B. 先放者有必胜策略 C. 无论谁都没有必胜策略
正确答案:B
题目分析:考虑到极端情况,如果桌子上只能放一个硬币,则先放着将硬币放在桌子正中央,则后放着就不能继续放硬币了。
7. 滴滴出行年会大 Party 已经开始筹划,小明作为总策划人,计划来一个“专车送喜”的节目引爆全场。节目主要是把神秘礼物放在一个大铁球中,铁球固定在牢固的地桩上,然后用汽车拉开铁球释放神秘礼物。任一铁球拉开所需的汽车数量一模一样,且拉开后不可恢复,铁球可能只要1辆车就能拉开,也可能要100辆车才能拉开。年会前2个测试用的铁球已经送到,现在小明请你用这2个铁球、100辆车(每辆车提供的马力一样)来测试每个铁球至少需要配多少辆车才能拉开。聪明的你最少要经过多少次测试能得出结论呢?
A. 12 B. 14 C. 25 D. 33
正确答案:B
题目分析:
8. 计算P=1111+1111*2+1111*3+…+1111*1111,P除以5的余数是多少?
A. 0 B. 1
正确答案:B
题目分析:
P=1111+1111∗2+1111∗3+...+1111∗1111
P
=
1111
+
1111
∗
2
+
1111
∗
3
+
.
.
.
+
1111
∗
1111
=1111∗(1+2+3+...+1111)
=
1111
∗
(
1
+
2
+
3
+
.
.
.
+
1111
)
=1111∗1111∗1112/2=1111∗1111∗556
=
1111
∗
1111
∗
1112
/
2
=
1111
∗
1111
∗
556
P除以5的余数为
P%5=((1111%5)∗(1111%5)∗(556%5))%5=1
P
%
5
=
(
(
1111
%
5
)
∗
(
1111
%
5
)
∗
(
556
%
5
)
)
%
5
=
1
9. 某粮仓有60万担粮食,现需要给前线运送粮食,粮仓距离前线行程有15天,但是运粮队每次只能携带30万担粮食,且每天行军需要消耗1万担粮食,问其最多能将多少万担粮食运到前线?
A. 15 B. 20 C. 25 D. 30
正确答案:C
题目分析:理想情况下,先将30万担粮食带到十天的位置,然后携带10万担粮食回到粮仓,再带着30万担粮食到达10天处,此时一共有30万担粮食,运粮队带着这30万担粮食运到前线需要5万担,因此,最多能运25万担粮食到前线。但是,最终能留到前线的粮食只有10万担。因为运粮队回来还得吃东西,不是吗?
10. 两个口袋,每个口袋里都装着60个红球与40个白球,有两人各自从一个口袋抽了一个球。 则抽出不同色球的概率为 :
A. 0.5 B. 0.24 C. 0.3 D. 0.48
正确答案:D
题目分析:首先,摸到红球的概率是3/5,摸到白球的概率是2/5,抽出的两个球颜色相同的概率为:(3/5)*(3/5)+(2/5)*(2/5)=13/25,那么两个球颜色不同的概率就是12/25=0.48
11. 甲和乙一起玩游戏——抢数字,设置要抢的数字是S,每次只能数N个(5<=N<=10),两人轮流数。最后谁数到S谁获胜,若甲先开始,那么当S为多少时候甲必胜?()
A. 2017 B. 2019 C. 2021 D. 2023
正确答案:AB
题目分析:由题意,经分析,只要当S对15取余得到的值在5到10之间且包括5和10时,甲必胜。此时,甲先取S%15,然后每次都取15-乙取得值。
12. 数列中哪个数不属于这个队列:
2 - 3 - 6 - 7 - 8 - 14 - 15 - 30
A.3 B. 7 C. 8 D. 15
正确答案:C
题目分析:可以发现,数列的规律是偶数与奇数交错排列,因此8是多余的。
13. 下面的程序会打印几个hello?
int main(void) {
fork();
printf(“hello\n”);
fork();
printf(“hello\n”);
while(1);
return 0;
}
A. 2 B. 4 C. 6 D. 8
正确答案:C
题目分析:一个进程包括代码、数据和分配给进程的资源。fork()函数会复制出一份与当前进程一样的进程,包括代码的执行位置。
14. 通过execve(2)系统调用执行一个ELF格式的可执行程序,在execve(2)系统调用返回时,该程序的代码段和数据段
A. 已经全部加载到内存里 B. 已经部分加载到内存里 C. 完全没有加载到内存里
正确答案:C
题目分析:execve函数成功时不会有返回值,如果失败会返回-1。
15. 下面关于KVM CPU虚拟化机制的描述正确的有?
A. QEMU的线程个数最多不超过VCPU的个数
B. QEMU/KVM在X86 CPU上只能运行X86架构的虚拟机
C. KVM VM运行时处于VMX root模式
D. 每一个VCPU有且仅有一个VMCS结构
正确答案:D
题目分析:
16. 将200.200.201.0这个网络进行子网的划分,要求尽可能划分出最多的网段,但每个网段不能少于5台计算机,该子网的子网掩码是什么?
A. 255.255.255.240
B. 255.255.255.252
C. 255.255.255.248
D. 255.255.255.0
正确答案:C
题目分析:
17. 当路由器接收的IP报文的MTU大于该路由器的最大MTU时采取的策略是
A. 丢掉该分组
B. 将该分组分片
C. 像源路由器发出请求,减少其分组大小
D. 直接转发该分组
正确答案:B
题目分析:
18. 下面哪个选项可以查看磁盘或分区的剩余空间?
A. dc B. dd C. free D. df
正确答案:D
题目分析:
dc命令是一个任意精度的计算器
dd命令用于复制文件并对原文件的内容进行转换和格式化处理
free命令可以显示当前系统未使用的和已使用的内存数目,还可以显示被内核使用的内存缓冲区。
df命令用于显示磁盘分区上的可使用的磁盘空间。默认显示单位为KB。可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息。
19. 下面哪个文件打开选项不会启用文件缓存?
A. O_APPEND B. O_SYNC C. O_DIRECT D. O_TRUNC
正确答案:C
题目分析:
20. Linux用于组织缓存页面的数据结构是?
A. B+ Tree B. AVL Tree C. Radix Tree D. Red-Black Tree
正确答案:C
题目分析:
21. 关于linux进程,下列说法正确的是
A. 只要进程的优先级在实时优先级范围,该进程就是实时进程
B. 即使系统中存在实时进程,普通进程仍然有机会得到执行
C. 开启内核抢占之后,在中断处理程序中也可以进行进程调度
D. 如果当前cpu的运行队列上已经没有可运行的进程,内核可能会将其他cpu上的进程移动到当前cpu运行
正确答案:BD
题目分析:
22. 关于OOM以下说法,哪些是正确的
A. OOM表示系统的物理资源耗尽
B. OOM表示系统的虚拟地址空间耗尽
C. 发生OOM时,系统会杀死某些用户进程
D. 发生OOM时,表示kernel已经处于崩溃不可用的状态
正确答案:AC
题目分析:OOM(Out Of Memory),Linux系统中的一个内核机制。