当前位置:才华君>好好学习>考研>

历年淘宝春季实习生招聘笔试题

考研 阅读(1.11W)

1. A,B两机器用千兆网传输,A上每个页面是1K字节,则B机器下载的限制是()

历年淘宝春季实习生招聘笔试题

千兆网指的是 1000Mb每秒也就是 1000/8 MB = 125MB的速度,1K字节为1KB 所以应为 100 000左右(不知道对不对)

2. 已知单链表,把节点q插入到节点p的操作是()

q->link = p->link; p->link = q

3. 用矩形表示世界上的每个国家,最少用()种颜色表示,使得共有边界的两个国家不会重色。

4种,地图的四色定理,但是由于条件比较特殊,国家是矩形,所以笔试时尝试了下,发现3种确实无法实现,选4种

4.快速排序的平均时间复杂度是O(nlgn),最坏的情况是O(n^2),什么时候会出现O(n^2)

数组基本有序

5. int i,j,*p;p=&i;问一下哪个表达式是把j赋给i()

*p=*&j;

6. #define F(a,b) a*b,则 F(3+6, 8-5)= ()

46,define是直接替代

7. 一个栈,进栈顺序为1,2,3,…,1—n,n,最先出栈的元素是n,那么第i个出栈的元素是()

N-i+1,栈是先进后出,既然最先出的是最后一个元素,那么答案就唯一了

8.树的后序遍历是ABC+*DE/-,中序遍历是,A*B+C-D/E,那么前序遍历是()

-*A+BC/DE

二、填空题

1.用数组保存数据,删除一个元素的平均需要移动元素的次数((1/2)(n-1))

2.求一个元素全为正数的数组中的次大元素的程序填空题,其中num >=2

int f(int *a, int num)

{

int number = a[0];

int result = 0;(=0是所填空)

for(int i=1; i

{

if(a[i] > number)

{

result = number;(空)

number = a[i];(空)

}

else if( a[i] > result)

{

result = a[i];(空)

}

}

return result;

}

3.下述函数输入9999,结果是(8)

Int Fun(int x)

{

int countx = 0;

whike(x)

{

countx++;

x = x & (x-1);

}

return countx;

}

很简单,其实把9999化成2进制,看有几个1就是答案了

4. int a[3][2] = {1,2,3,4,5,6}, int *p[3], p[0] = a[1];

问 *(p[0]+1)是几

4, p[0]指向的位置是 a[1][0],p[0]+1指向的位置自然是a[1][1]啦~

三、综合题

1. 有7000g的大米,50克和200克的砝码,要称出1350g,最小需要称几次?

3次

3次的最佳方案是 ,先拿7000和200分出 一份3400,一份3600

‍然后平分3600得到1800

然后 3400-(1800+200+50) = 1350

2. N个鸡蛋放到M个篮子中,每个篮子中至少放一个,要满足的条件:输入任意一个不大于N的正整数,总有某几个篮子中的鸡蛋数目之和与之相等。写一个函数,输入N,M,输出所有可能的鸡蛋放置情况

没什么太好的想法,个人觉得很难的一个题,实在不行就遍历枚举吧,也算是一种方法

回去之后再好好想想这个题

一、选择题

1. A,B两机器用千兆网传输,A上每个页面是1K字节,则B机器下载的限制是()

千兆网指的是可以传输1000Mbit/s,答案是:1000M/(1024*8) = 100000bit/s

2. 单链表,已知p->link指向p的下一个节点,q指向一个新的节点,把q插入到p之后的操作是()

q->link = p->link; p->link = q

3. 用矩形表示世界上的每个国家,最少用()种颜色表示,使得相邻的两个国家不会重色。

3种

4.快速排序在通常情况下时间复杂度是O(nlgn),在()情况下是O(n2)

数组基本排好序的情况

5. int i,j=2,int *p=&i把正确的实现i=j的是(*p=*&j)

int i,j=2,*j=把i=j

6. #define F(a,b) a*b,则 F(3+6, 8-5)= ()

46

7. 一个栈,1—n,最先出栈的元素是n,那么第i个出栈的元素是()

n-i+1

8.二叉树遍历题,答案记着D。前序

二、填空题

1.数组中删除元素的平均移动次数

(n-1)/2

2.求数组中的`次大元素的程序填空题。result=number;number=data[i];result=data[i];

3.下述函数输入9999,结果是(8)

Fun(int x)

{

int countx = 0;

whike(x)

{

countx++;

x = x & (x-1);

}

}

4. int a[3][2]={1,2,3,4,5,6};int *p[3];p[0]=a[1];printf("%d",*(p[0]+1));,结果是4

三、综合题

1. 有7公斤的的米,50克和200克的砝码,要称出1350g米,最小需要称几次?3次。

第一次:200+50,称出250g

第二次:200+250,称出450

第三次:200+450,称出650

共称出1350g

2. N个鸡蛋放到M个篮子中,每个篮子中至少放一个,要满足的条件:输入任意一个不大于N的正整数,总有某几个篮子中的鸡蛋数目之和与之相等。写一个函数,输入N,M,输出所有可能的鸡蛋放置情况

本人的做法:按二进制中的1的位置进行存放, M的范围[logN,N]

3.评论数据处理问题。