深信服 9-15笔试 C卷

深信服 9-15笔试 C卷

15题填空,4道编程

填空

填空比较基础,考察了数据结构(队列,二叉树),和简单编程,二进制等。

1、1 2 3 4 5 入队,然后队首弹出,6 7 8 9 10 入队,然后队首弹出,11 12 13 14 15 入队,然后队首弹出

最后求队首到队尾: 4 5 6 7 8 9 10 11 12 13 14 15

2、求阶乘和x,补全代码

c++ 复制代码
int x = 0;
int y = 1;
int z = 1;

while (z < n) {
	y = y * z; // 补全
    x = x + y; // 补全
    z ++; 
}

3、给了一种表示二叉树节点的4元组,最后画出二叉树找距离根节点最远的节点(每个节点直接有距离)

4、给后序遍历和二叉树的图(上面只有节点,没有信息)求中序遍历

5、找16以内的二进制回文数(转成二进制后是回文二进制的数)

6、缓冲区满了以后,新的数据覆盖旧的数据是什么队列(双向队列or循环队列)感觉应该是循环,我当时想到LRU实现去了。

7、逻辑推理题,这个国家有两种人,在平原上的只说真话,在山里的只说假话。但是你不懂他们的语言,你只知道G和M表示 或者不是

你给三个人提了2个问题:

​ 1.其他两人是平原人

​ 2.其他两人是山里人

除了第一个人回答第二个问题回答的是M,其他回答均为G

问G表示什么 :不是

8、在一个排序的链表里插入一个数,并保存顺序,时间复杂度是多少。

O(n)或者 二分? O(logn)

9、5个人ABCDE,他们参加选举投票,一人一票,然后围着坐(按abcde的顺序,顺时针),他们投票会投给投给他们的人的左边的人,最后没人当选,求他们投给了谁

A -> D B -> E 
C -> A D -> B  
E -> C

10、入队:1234,求出队:1234

11、在一个链表的节点p的后面插入,一个新的节点n的指针操作是什么?

n.next = p.next
p.next = n
n.next.pre = n;

12、平衡二叉树插入一个新的后,问改变后的二叉树的节点的左右孩子是什么。

13、给了一个代码,是两个递归的函数,互相递归,求指定函数的结果。

14、找规律

15、忘了

编程题

1、给一个字符串找有多少种病毒,如aa有1个(重复的不算),ab 有3个 [a, b, ab],同理, abc有7个

思路:读入后统计不重复的字母,然后2的n次方-1就是答案。

2、走迷宫,迷宫0不能走,其他可以走,数字表示该点的金币,从左上走到右下角,但是有一次魔法,可以将不能走的变成金币为0的可以走的路,求最多拿到的金币。

3、翻译加密,给一个原串 1 2 3 4 5,然后先倒序 5 4 3 2 1,然后再打乱顺序排成一个数组一行, 前面表示这个数,后面表示下一个数在第几行,提示用链表,最后输出原串。

5 2

4 3

3 5

1 0

2 4

4、给一个字符串,如abc,求所有的出栈顺序(看成全排列了,要排除一些情况)