大众点评网2016校招试题选录
2015-09-17 22:30
190 查看
大众点评网的校招题还真有特点,分四部分,第一部分是行测的数字规律类题目,第二部分是行测的图形规律题,第三部分是C++、Java的基础选择题,第四部分是四个编程题。
题目都有时间限制,第一二部分皆是普通的行测题,第三四部分回归到编程题。总的感觉是行测题开始比较简单,后面比较难,程序类题目考了java和C++,我是不会java的,所以就半猜半写了。下面把我记下来的一些题写下来,以飨读者。
1.(C++) 在32位系统下,有如下的结构定义
struct
{
short x;
int y;
}A;
struct
{
short x;
long y;
char z;
}B;
则cout<<sizeof(A)<<sizeof(B)的执行结果是()
A. 5 12 B. 6 8 C. 8 12 D. 3 7
解析:
上述问题主要考了结构体的字节对齐问题,A:short 2字节,int 4字节,对齐后,所以sizeof(A)=8,B: short 2字节,long 4字节,char 1字节,对齐后sizeof(B)=12字节。因此选择C
2.有N个未排序的数组成的数组,和一个数sum,我们希望找到两个数,他们的和最接近sum.问时间复杂度为()
A.n B. nlog(n) C.n^2 D.n^2long(n)
解析:
选A
题目都有时间限制,第一二部分皆是普通的行测题,第三四部分回归到编程题。总的感觉是行测题开始比较简单,后面比较难,程序类题目考了java和C++,我是不会java的,所以就半猜半写了。下面把我记下来的一些题写下来,以飨读者。
1.(C++) 在32位系统下,有如下的结构定义
struct
{
short x;
int y;
}A;
struct
{
short x;
long y;
char z;
}B;
则cout<<sizeof(A)<<sizeof(B)的执行结果是()
A. 5 12 B. 6 8 C. 8 12 D. 3 7
解析:
上述问题主要考了结构体的字节对齐问题,A:short 2字节,int 4字节,对齐后,所以sizeof(A)=8,B: short 2字节,long 4字节,char 1字节,对齐后sizeof(B)=12字节。因此选择C
2.有N个未排序的数组成的数组,和一个数sum,我们希望找到两个数,他们的和最接近sum.问时间复杂度为()
A.n B. nlog(n) C.n^2 D.n^2long(n)
解析:
#include <iostream> #include <cmath> #include <vector> using namespace std; struct node { int x;//代表元素 int num;//代笔元素的个数 }; void FindTwoNums(int a[], int n, int sum)//找出最接近sum的两个数 { int left, right, error; int low=a[0], high=a[0]; for (int i = 1; i < n; i++) { if (low>a[i]) { low = a[i]; } if (high<a[i]) { high = a[i]; } } vector<node> data(high - low + 1); for (auto& it:data) { it.num = 0; it.x = 0; } for (int k = 0; k < n;k++) { data[a[k] - low].num++; data[a[k] - low].x = a[k]; } int i = 0; int j = high - low; left = data[i].x; right = data[j].x; error = abs(left + right - sum); while (i<j) { while (i<j&&data[j].num==0) { j--; } while (i<j&& data[i].num==0) { i++; } if (data[i].x+data[j].x==sum) { cout << "两个数已找到,他们分别是" << " " << data[i].x << " "<<data[j].x << endl; return; } else { if (abs(data[i].x+data[j].x-sum)<error) { left = data[i].x; right = data[j].x; error = abs(left + right - sum); } if (data[i].x + data[j].x>sum) { data[j].num--; } else { data[i].num--; } } } cout << "两个数已找到,他们分别是" << " " << left << " " << right << endl; } int main() { int a[] = { 2, 5, 6, 6,8, 10 }; FindTwoNums(a, 5, 9); return 0; }
选A
相关文章推荐
- error: Autoconf version 2.67 or higher is required
- 关于CSS动画几点要注意的地方
- 决定学linux了
- 决定学linux了
- 决定学linux了
- 决定学linux了
- 决定学linux了
- 决定学linux了
- 决定学linux了
- 决定学linux了
- 决定学linux了
- js ajax 异步 同步 区别
- 单选按钮的使用
- Linux信号编程实践(三) 信号在内核中的表示(sigaction&sigqueue)
- ASP.NET WebAPI项目中apiController控制器中怎样获得当前项目根目录
- IOS 刷新UItableView 中的行或组详细介绍
- 安卓应用程序的多语言配置
- 自定义View3 仿联系人A-Z选择效果
- 提交按钮的使用
- 0916_vbs加密与远程登录融合