58同城 | C/C++工程师笔试题详解

Posted 学益得智能硬件

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了58同城 | C/C++工程师笔试题详解相关的知识,希望对你有一定的参考价值。


作者 | Lee


试题来自牛客网。





F,E,D,C,B,A的顺序进栈,请问下列哪一个出栈顺序是不可能的是()


A、EDCFAB

B、DCABEF

C、EDCFBA

D、CBDFEA


答案:D


题解:


选项D:FEDC进栈,C出栈,此时栈顶是D;B进栈,B出栈,此时栈顶是D;D出栈,此时栈顶是E;F在E的下面,所以F不可能出栈。D选项错误。





一个单向链表上的两个元素,指针M和N分别指向这两个元素,M所指元素是N所指元素前驱的条件是()


A、M->next = N;

B、M->next = N->next;

C、N->next = M;

D、M = N;


答案:A





现有长度分别为1,2,3,4,5,6,7,8,9,10 的木棍各一根,现要求用这些木棍(可以多根组合,但组合A=B=C=D, ABCD、ACDB..等重排列算一种正方形)拼成一个正方形,可以有几种拼法()


A、18种

B、19种

C、20种

D、15种


答案:B


题解:


由于每根木棍的长度不同,所以一定需要 7 根以上才能组成正方形;也就是说正方形的边长一定要 7 以上;

边长7有一种:1+6、2+5、3+4、7;
边长8有一种:1+7、2+6、3+5、8;
边长9有五种:1+8、2+7、3+6、4+5、9;(选4组进行组合)
边长10有五种:1+9、2+8、3+7、4+6、10;(选4组进行组合)
边长11有五种:1+10、2+9、3+8、4+7、5+6;(同上)
边长12有一种:2+10、3+9、4+8、5+7;
边长13有一种:3+10、4+9、5+8、6+7;

一共 19 种。





A、fe80:0:b4f9:6c6f:b658:d4aa

B、fe80:0:0:0:b4u9:6c6f:b658:d4aa

C、fe80::b4f9:6c6f:b658:d4aa

D、fe80::b4f9:6c6f:b658::d4aa


答案:C


题解:


       1050:0000:0000:0000:0005:0600:300c:326b

       可以写成:

       1050:0:0:0:5:600:300c:326b

  • IPv6 可以通过双冒号代替一系列的0,比如:

       ff06:0:0:0:0:0:0:c3

       可以写成:

       ff06::c3





1+2*(3+8/4)的后缀表达式正确写法是()


A、12384/+*+

B、/+*+12384

C、12384+*+/

D、+*+/12384


答案:A


题解:


中缀表达式变成后缀表达式的规则:

  • 遇到数字直接写出来;

  • 遇到运算符:

  • 如果栈为空,直接进栈;

  • 如果优先级高于栈顶元素,直接进栈;

  • 如果是(直接进栈;

  • 如果是),则栈顶出栈,直到遇到(;

  • 如果优先级不高于栈顶, 则栈顶出栈;

  • 如果栈顶是(,直接进栈。





运维同学通知我们一台服务器(linux)存放日志的磁盘分区快满了,因此我们决定删除一些日志。但该服务器部署了多个服务,我们想优先删除磁盘占用量比较大的服务的日志。已知所有服务都将日志打印到/opt/scf/log/{服务名}/{服务名}.log, 请帮忙选出一个命令来查看各个服务日志占用的空间()


A、df -h /opt/scf/log

B、df -h /opt/scf/log/*

C、du -sh /opt/scf/log

D、du -sh /opt/scf/log/*


答案:D


题解:


df -h:以可读性较好的方式显示文件系统信息;

du -sh:查看当前目录下各个文件及目录占用空间大小





以下哪项是对单核cpu执行程序时间的正确描述()


A、程序CPU执行时间= 指令数× 时钟周期时间

B、程序CPU执行时间= CPU时钟周期数× 单条指令平均执行周期

C、程序CPU执行时间=指令数×单条指令平均执行周期×时钟周期时间

D、程序CPU执行时间= CPU时钟周期数× 指令数×单条指令平均执行周期×时钟周期时间


答案:C





机器间传输数据,发送端发送2096字节的数据,接收端会出现丢失部分数据情况(传输协议使用: UDP),引起这问题最大可能原因()


A、网络环境问题

B、接收端网卡问题

C、数据长度大于接收端缓冲区

D、网络传输分包


答案:C





采用快排对3 7 6 9 10 12 1进行排序(第一个为基准数),第一轮探测结果为()


A、1 3 6 9 10 12 7

B、9 1 6 3 10 12 7

C、3 1 6 9 10 12 7

D、1 3 6 7 9 10 12


答案:A

题解:

快速排序思想:以某个数为基准,进行第一次调整,要求调整完后,基准前面的数字都比基准数字小,基准后面的数字逗比基准数字大(如果是按从小到大排序)。然后对基准数字前面的序列以及后面的序列都进行相同的操作(递归)。

题目中以数字 3 为基准,所以第一趟排序后,3前面的数字都应该比 3 小,3后面的数字都应该比 3 大。




以下关于进程调度算法的描述中,错误的是()


A、优先级调度算法会引起进程的饥饿问题

B、短作业优先调度算法的平均等待时间最少

C、当系统最长响应时间一定时,时间片轮转调度算法的时间片大小与系统允许的最大进程数成正比

D、高响应比优先调度算法综合考虑了进程等待时间和执行时间


答案:C


十一


对TCP/IP协议集叙述正确的的选项()


A、TCP/IP协议集分为4层,从上到下依次分别为应用层、网络层、传输层、接口层

C、网络层包含有"TCP"、"UDP"等

D、"TCP"在创建链接使用"3次握手",断开链接使用"4次握手"


答案:D

题解:

选项A:应用层-传输层-网络层-数据链路层;
选项B:ARP属于网络层;
选项C:TCP和UDP协议属于传输层。


十二


时间限制:C/C++ 1秒,其他语言2秒

空间限制:C/C++ 32M,其他语言64M


给定一个字符串,字符串是有序的整数集合,逗号相连,移除相同的数字,使每个数字只出现一次,输出最终的数字个数。


输入描述:

1,2,2


输出描述:
 
   
   
 
2

输入例子1:
 
   
   
 
1,2,2

输出例子1:
 
   
   
 
2

输入例子2:
 
   
   
 
0,0,1,1,1,2,2,3,3,4

输出例子2:
 
   
   
 
5


#include <stdio.h>#include <string.h>#include <stdlib.h>
int count(int *a, int last){ int i, length = 1, num = a[0];
for (i = 1; i <= last; i++) { if (a[i] != num) //遇到相同的数字跳过,统计不同数字的个数 { length++; num = a[i]; } } return length; //返回个数}
int str_to_int(char *str, int *a){ int i = 0; char *p1, *p2; p1 = str; p2 = str; char num[32] = {0};
while (*p1 != '\0' && *p2 != '\0') { if (*p2 == ',') //遇到逗号开始解析前面的字符串 { strncpy(num, p1, p2 - p1); //存放逗号之间的字符串 a[i++] = atoi(num); //字符串转换成数字 p1 = ++p2; memset(num, 0, sizeof(num)); } else { p2++; } }
strncpy(num, p1, p2 - p1); //最后一个数字没有逗号,单独处理 a[i] = atoi(num);
return i; //返回最后一个数字的下标}
int main(){ char str[1024] = {0}; int array[1024] = {0};
scanf("%s", str); //把输入当做一个字符串获取
int length = str_to_int(str, array); //根据逗号解析字符串,得到一个整形数组
printf("%d\n", count(array, length));
return 0;}



十三


时间限制:C/C++ 1秒,其他语言2秒

空间限制:C/C++ 32M,其他语言64M


现有一个地图,由横线与竖线组成(参考围棋棋盘),且两点之间有行走距离起点为左上角,终点为右下角在地图上,每次行走只能沿线移动到临近的点,并累加路径计算一个人从地图的起点走到终点的最小路径为多少。


输入描述:

m*n地图表示如下:

3
3
1 3 4
2 1 2
4 3 1

其中m=3,n=3 表示3*3的矩阵

行走路径为:下>右>右>下


输出描述:
 
   
   
 
路径总长:1+2+1+2+1=7

输入例子1:
 
   
   
 
1
2
1 2

输出例子1:
 
   
   
 
3

输入例子2:
 
   
   
 
2
3
9 8 6
2 3 7

输出例子2:
 
   
   
 
21

#include <stdio.h>#include <stdlib.h>
int min(int x, int y){ return (x < y) ? x : y;}
int main(){ int m, n; int i, j;
scanf("%d%d", &m, &n);
//int (*input)[n] = (int (*)[n])malloc(sizeof(int) * m * n); int **input = (int **)malloc(sizeof(int *) * m); for (i = 0; i < m; i++) { input[i] = (int *)malloc(sizeof(int) * n); } for (i = 0; i < m; i++) { for (j = 0; j < n; j++) { scanf("%d", &input[i][j]); } }
//int (*dp)[n] = (int (*)[n])malloc(sizeof(int) * m * n); int **dp = (int **)malloc(sizeof(int *) * m); for (i = 0; i < m; i++) { dp[i] = (int *)malloc(sizeof(int) * n); } dp[0][0] = input[0][0];
for(i = 1; i < m; i++) { dp[i][0] = dp[i - 1][0] + input[i][0]; }
for(i = 1; i < n; i++) { dp[0][i] = dp[0][i - 1] + input[0][i]; }
for(i = 1; i < m; i++) { for(j = 1; j < n; j++) { dp[i][j] = min(dp[i-1][j], dp[i][j - 1]) + input[i][j]; } }
printf("%d\n", dp[m - 1][n - 1]);
return 0;}


58同城 | C/C++工程师笔试题详解


★ 系 列 课 推 荐 ★





以上是关于58同城 | C/C++工程师笔试题详解的主要内容,如果未能解决你的问题,请参考以下文章

58同城笔试题:数组去重;分饼干(分糖果);最小路径和(leetcode64)

58同城前端笔试题

哔哩哔哩 | 2020C/C++工程师笔试题详解

58同城2018校招前端笔试题总结

方格走法 蘑菇街笔试题

003_C/C++笔试题_分享大汇总