2017网易有道内推笔试回顾
这次内推的笔试考试感觉就是挺杂的,考题没有区分大的方向。ios和研发工程师的题目没区别。编程题也是一样,就是顺序换了下,所以编程题也没有难度梯度的区分,有些不科学。扯这么多其实感觉还是自己的基础不扎实,得加油了。
下面回忆一下考到了什么。
选择题(单选和多选,2分×15题=30分)
这边只能大致回忆起一些知识点了
1.Linux下管道命令来统计for循环的次数会用到哪些指令? (多选)选项: cat、wc、grep、vi
2.解释和编译的比较,效率,是否生成本地文件,是否独立于机器等
3.B-数的根结点的关键字数量的最大和最小值
4.xml相关知识点:xml的方式、根节点的数量、是哦副可以嵌套
5.json的相关知识点
6.位密度
7.intent和action的相关知识点:对应关系,默认值、隐式intent、scheme等
8.类概率密度
9.根据前序和中序输出后序遍历结果
10.关于访问权限,c++中class的默认访问权限,public、private、protected等
11.一道程序输出结果的题目。
12.循环队列元素个数,不太严谨的出题,没有说明队尾是元素还是空填充。
选择题就记得这么多了,多选单选交替,感觉知识点牵扯有点多。
编程题(3题×30=90分)
下面描述的编程题都是大致的题意,仅供参考。
第一题
小明实现了一个队列。
队列里依次的操作如下:
取队列队首元素,保存在x中。
将队首元素插入到队尾
删除队首元素
输出新的队首元素
while(!Q.empty()) //队列不空,执行循环 { int x=Q.front(); //取出当前队头的值x Q.pop(); //弹出当前队头 Q.push(x); //把x放入队尾 x=Q.front(); //取出这时候队头的值 printf("%d\n",x); //输出x Q.pop(); //弹出这时候的队头 }
测试用例要求:
输入:
4 //这个是总的输入此数,下面为n的大小 1 3 //原题有误,上面是5 2 10
输出:
1 2 1 2 1 3 8 1 6 2 10 3 7 4 9 5
此时他发现输出的元素是按照1,2,3,4,5...n有序排列的,求原始队列元素的顺序。
[思路1:数组初始化为空,按照空1填1的原则将数字塞入数组之中,已经填充过的那一位下次遍历的时候不计入其中]
我的代码:笔试当天想到思路了,就是有些生疏,没有写出来,还是练得少了,今天写了。感觉思路还是不太好。
1 #include <iostream> 2 #include <memory.h> 3 using namespace std; 4 void findAndInsert(int *a,int num,int &,int); 5 int main() 6 { 7 int time; 8 int n; 9 cin>>time; 10 while(time--){ 11 cin>>n; 12 int *a=new int[n]; 13 memset(a,0,n*4); 14 int num=1; 15 int position=0; 16 //n次循环插入n个数字到指定的位置 17 while(num<=n){ 18 //寻找对应的坑并插入 19 findAndInsert(a,num,position,n); 20 num++; 21 } 22 for(int i=0;i<n-1;i++) 23 cout<<a[i]<<" "; 24 cout<<a[n-1]<<endl; 25 delete []a; 26 } 27 28 } 29 30 31 void findAndInsert(int *a,int num,int &position,int n){ 32 for(int i=0;i<n;i++){ 33 if(a[position]==0){ 34 position++; 35 if(position>=n) 36 position=position%n; 37 break; 38 } 39 else 40 { 41 position++; 42 if(position>=n) 43 position=position%n; 44 } 45 } 46 for(int i=0;i<n;i++){ 47 if(a[position]==0){ 48 a[position]=num; 49 break; 50 } 51 else 52 { 53 position++; 54 if(position>=n) 55 position=position%n; 56 } 57 } 58 59 60 }
第二题
洗牌
有一副牌2n张。1,2,3...2n
分成两叠,左手1-n,右手n+1-2n,首先取出右手的最后一张牌2n,左手的最后一张n,然后是两边的倒数第二张。依次类推。然后把牌面反过来。
如n=3,牌1,2,3,4,5,6
则一次洗牌的结果是1,4,2,5,3,6
第二次洗牌的结果是1,5,4,3,2,6
请输出k的洗牌后的结果。
[思路1:其实就是两队中各取一张牌,直到取完为止。注意洗牌有次数控制]
笔试的时候我写的代码,太繁杂。
1 #include <iostream> 2 #include <vector> 3 using namespace std; 4 void exchange(vector<int> &); 5 int main() 6 { 7 int times; 8 int n,k; 9 int card; 10 cin>>times; 11 while(times--) 12 { 13 vector<int> v; 14 cin>>n>>k; 15 for(int i=0;i<2*n;i++) 16 { 17 cin>>card; 18 v.push_back(card); 19 } 20 for(int i=0;i<k;i++) 21 exchange(v); 22 for(int i=0;i<2*n-1;i++) 23 cout<<v[i]<<" "; 24 cout<<v[2*n-1]<<endl; 25 v.clear(); 26 } 27 } 28 29 30 void exchange(vector<int> &v) 31 { 32 int n=v.size()/2; 33 vector<int> temp; 34 for(int i=0;i<n;i++) 35 { 36 temp.push_back(v[i]); 37 temp.push_back(v[i+n]); 38 } 39 for(int i=0;i<v.size();i++) 40 v[i]=temp[i]; 41 temp.clear(); 42 }
第三题
矩形
给出n条边的首尾顶点坐标,输出组成矩形的对角坐标。(这题具体记不清了,没写)

浙公网安备 33010602011771号