2013网易实习生招聘笔试题
2013-03-22 11:07
323 查看
一、选择题
1、题目略,此处主要有一个考点,如下。
对于一个二维数组int a[3],a和&a的值是一样的,但是也是有区别的。a+1的值会根据数组a的类型决定增加的大小,这里int类型大小为4个字节,所以a+1比a大4,而使用&之后,取出的地址是没有类型的,&a+1实际只比&a大1。
2、第二题简单,只要知道short类型占两个字节即可。
二、简答题
1、static关键字的作用,个人经验主要有以下几种:1)函数局部static变量,第一次函数调用被初始化,后续每次调用将使用上次调用后保存的值;2)全局变量中static变量,可以防止被其他文件的代码使用这个变量,有点将这个全局变量设置为private的意味;3)对于static函数来说,效果和2中的变量相同;4)C++类中static方法,不需要实例化访问;5)C++定义static类成员变量,不需要实例化访问,不过需要先定义,定义的时候可以初始化数组。
2、volatile用来声明一个变量,并强制程序在每次使用变量的重新从变量地址读取数据,这是为了防止变量在其他地方被改变,而程序仍然使用没有更新的数据。
3、略
4、略
三、编程题
1、给定升序自然数数组,数字有重复,二分算法求给定任意数字位置,参数决定是给定数字的开始位置还是结束位置。这里关键是开始结束位置的高效判定,代码如下。
2、给定一个乱序的自然数数组,求里面的数字能够组成最长连续数组的长度,例如给定[100,2,1,3],有[1,2,3],所以返回值为3,要求复杂度O(n)。
直接做的话,复杂度是nlog(n)的,用一个hash表的方法,复杂度为O(数组中最大数-数组中最小数),目测还不如直接做,n复杂度的如下。
1、题目略,此处主要有一个考点,如下。
对于一个二维数组int a[3],a和&a的值是一样的,但是也是有区别的。a+1的值会根据数组a的类型决定增加的大小,这里int类型大小为4个字节,所以a+1比a大4,而使用&之后,取出的地址是没有类型的,&a+1实际只比&a大1。
2、第二题简单,只要知道short类型占两个字节即可。
二、简答题
1、static关键字的作用,个人经验主要有以下几种:1)函数局部static变量,第一次函数调用被初始化,后续每次调用将使用上次调用后保存的值;2)全局变量中static变量,可以防止被其他文件的代码使用这个变量,有点将这个全局变量设置为private的意味;3)对于static函数来说,效果和2中的变量相同;4)C++类中static方法,不需要实例化访问;5)C++定义static类成员变量,不需要实例化访问,不过需要先定义,定义的时候可以初始化数组。
2、volatile用来声明一个变量,并强制程序在每次使用变量的重新从变量地址读取数据,这是为了防止变量在其他地方被改变,而程序仍然使用没有更新的数据。
3、略
4、略
三、编程题
1、给定升序自然数数组,数字有重复,二分算法求给定任意数字位置,参数决定是给定数字的开始位置还是结束位置。这里关键是开始结束位置的高效判定,代码如下。
#include <stdio.h> int array[]={1,2,2,2,2,3,3,3,3,4,4,4,4,6,6,6,8,8,8,10}; int search(int *array, int begin, int end, int number, int left) { if(array == NULL) return -1; if(begin > end) return -1; int middle = (begin + end) / 2; if(array[middle] == number) { if(left) { int leftindex = middle - 1; if(leftindex >= begin) { if(array[leftindex] < array[middle]) return middle; else end = leftindex; } else return middle; } else { int rightindex = middle + 1; if(rightindex <= end) { if(array[rightindex] > array[middle]) return middle; else begin = rightindex; } else return middle; } } else if(array[middle] < number) begin = middle + 1; else end = middle - 1; return search(array, begin, end, number, left); } int main() { int n = search(array, 0, sizeof(array)/sizeof(int) - 1, 4, 0); printf("%d\n", n); return 0; }
2、给定一个乱序的自然数数组,求里面的数字能够组成最长连续数组的长度,例如给定[100,2,1,3],有[1,2,3],所以返回值为3,要求复杂度O(n)。
直接做的话,复杂度是nlog(n)的,用一个hash表的方法,复杂度为O(数组中最大数-数组中最小数),目测还不如直接做,n复杂度的如下。
#include <stdio.h> int array[]={100, 2, 1, 3, 8, 5, 4}; int size = sizeof(array) / sizeof(int); //构造两个简陋的hash表,一个是用来查询数字是否存在,一个用于标记数字是否使用过 char hash_exist[1024]; char hash_used[1024]; int main() { int i, j, n, max = 0, maxnum = array[0], minnum = array[0]; for(i = 0; i < size; i++) { //标记数字存在 hash_exist[array[i]] = 1; //找出数组最大元素 if(maxnum < array[i]) maxnum = array[i]; //找出数组最小元素 if(minnum > array[i]) minnum = array[i]; } for(i = 0; i < size; i++) { j = array[i]; //如果已经统计过,就跳过 if(hash_used[j]) continue; //标记本身 n = 1; hash_used[j] = 1; //比array[i]大的连续元素统计 while(++j <= maxnum) { if(hash_exist[j]) { n++; hash_used[j] = 1; } else break; } //比array[i]小的连续元素统计 j = array[i]; while(--j >= minnum) { if(hash_exist[j]) { n++; hash_used[j] = 1; } else break; } //更新最大连续数字 if(n > max) max = n; } printf("%d\n", max); return 0; }
相关文章推荐
- 2013网易实习生招聘笔试题
- 2013网易实习生招聘笔试题
- 2017网易游戏雷火盘古实习生招聘笔试(4)赛马
- 网易2017实习生招聘笔试题编程题(双核处理)
- 网易游戏2016实习生招聘笔试题目--井字棋
- 测试问题2013(4月)腾讯实习生招聘(测试开发)从笔试到一面
- 网易互娱2017实习生招聘游戏研发工程师在线笔试第二场(图像处理)
- C++工程师笔试题——meitu(2013暑假实习生招聘)
- 腾讯2013校园实习生招聘笔试题,附答案
- 网易游戏2016实习生招聘笔试题目--推箱子
- [转]网易2013校园招聘笔试题集锦
- 【笔试】Microsoft 2013实习生招聘笔试题及解答
- 网易2013校园招聘笔试题
- 网易互娱2017实习生招聘在线笔试(三)
- 网易互娱2017实习生招聘游戏研发工程师在线笔试第二场(一起消消毒)
- 2017网易游戏雷火盘古实习生招聘笔试真题:赛马 [python]
- 网易2017实习生招聘笔试题 C++开发工程师
- 2017网易游戏雷火盘古实习生招聘笔试真题:最大和 [python]
- hihocoder 网易游戏2016实习生招聘在线笔试 解题报告
- 网易游戏2016实习生招聘在线笔试:A 推箱子