EMC校招笔试题目

-------------------------------------------------

1,7×(1/7) = 1是什么率?

乘法运算满足结合律,交换律和分配率。这个题目用的应该是交换律。

2,what's database view?

视图是根据用户需求从一个表或者多个表构建的虚表。

视图与表的区别:视图不存储数据,只存储定义。

视图与查询的区别:视图存储为数据库设计的一部分,查询则不是。

3,4*(3*2) = (4*3)*2是什么率?

结合律

4,ABCDEF六城市两两相连,问从A到B路径有多少个(路径上不能出现环)?

这是个很简单的排列组合问题。

经过0个城市的路径:1

经过1个城市的路径:4

经过2个城市的路径:4*3=12

经过3个城市的路径:4*3*2=24

经过4个城市的路径:4*3*2*1=24

共1+4+12+24+24=65

5,问要进行stable的sorting,会避免使用哪种算法?

常用的排序算法中,稳定排序有:冒泡排序,插入排序,归并排序,基数排序

不稳定排序有:堆排序,快速排序,选择排序,希尔排序

6,0.15625写成二进制是什么?

0.00101

7,问1,2,3,5,8,13...这个数列,第58个除以第57个得多少?

这是个斐波那契数列。如果是个选择题,可以用估计法,至少这个数大于1.5的。

8,Raid0的作用

RAID 0 splits data evenly across two or more disks without parity information for speed. RAID 0 was not one of the original RAID levels and provides no data redundancy. RAID 0 is normally used to increase performance, although it can also be used as a way to create a large logical disk out of two or more physical ones.

9,火星上到处是硬币,随便拿起一个,如果是头朝上的就翻成字朝上的,如果是字朝上的就抛出,落地后有各一半的机会头朝上或字朝上。再随便拿起包括刚才那个在内的所有硬币中的一个,重复前述步骤。问,很多很多次后字朝上和头朝上的硬币比例?

这个题目真心有点难,是个极限概率的问题,用我这已经忘得差不多的概率论的知识姑且推导如下:

一开始星球上的硬币可以假设是随机分布的,但是这点不重要,因为我们要求的是无限情况,无论初始情况什么样子,无限扔了之后,都会达到一个稳定的状态。那么这时候,求所有硬币字朝上的与字朝下的比例,与求一个硬币扔了无限次之后字朝上的概率与字朝下的概率比是一样的。

p(字朝上,n)表示操作了n次之后字朝上的概率,p(头朝上,n)表示操作了n次之后字朝下的概率,那么有:

p(字朝上,n)=p(字朝上,n-1)*(1/2)+p(投朝上,n-1)

p(头朝上,n)=p(字朝上,n-1)*(1/2)

那么,

lim(p(字朝上,n)/p(头朝上,n))=lim((p(字朝上,n-1)*(1/2)+p(投朝上,n-1))/(p(字朝上,n-1)*(1/2)))

a=1+2(1/a)

可得到a=2

9,raid5

是一种存储性能,数据安全和存储成本兼顾的解决方案;他使用的是DISK striping(硬盘分区)技术,raid5至少需要3个硬盘,raid5不对存储的数据进行备份,而是把数据和相对应的奇偶校验信息组成raid5的各个磁盘上,并且奇偶校验信息和相应的数据分别存储于不同的硬盘上,raid5的一个硬盘数据发生损坏后,利用剩下的数据和相应的奇偶校验信息去恢复被损坏的数据。

10,问又要考虑安全又要充分利用带宽的网络中,是先加密后压缩,还是先压缩后加密?

这题不知道。至少,认为压缩后产生的加密数据变小所以先压缩后加密,是不对的。别忘了,即使对原始数据先加密,产生的多余数据也会被压缩,数据量不一定比前种方法多。

11,问要使一群人存在2人同月出生概率不低于50%的最小人数是多少?

P(k,12)/12^k<0.5

P(k,12)/12^k是k个人生日各不相同的概率,P(k,12)是4从12个月取k的月的排列。

k的最小值是4.

13 写一个画圆的函数

int drawCircle(int x, int y, int radius);

要求:要让圆看起来连续圆滑,要画多余4×radius个点。

这个关键是要计算出圆弧上点的位置,如果1度一个点,那么需要画360个点,如果圆心的坐标是(x,y),从最上面的点为第0个点,顺时针,第i的点的x,y坐标为:

xi=x+sin(i/2pi)

yi=y+cos(i/2pi)

然后把相邻点用直线连接起来。

画4*radius的点也同样。

14, 函数声明如下

  int func(int i ,int N);

  其中i <= N,功能输出i递增到N再递减到i的整数,每行输出一个数。比如func(1,5)就是

1

2

3

4

5

4

3

2

1

要求是只用一条语句(函数体就一个分号)完成功能。要求:

不能有逗号,不能有新变量声明,不能用?:,不能用循环,不能用char int 什么什么的保留字符。

这题只能有一句变态还形容了。

经过测试,这么一句

int func(int i,int N){
return printf("%d\n",i) && (i<N && ((func(i+1,N)) || !printf("%d\n",i)));
}

是对的。

这利用了&&和||运算的性质还做出选择,利用递归实现了循环的输出。

------------------------------------------------------------------------------

1,求=?

这里利用了一个费马小定理,这个定理是初等数论四大定理之一。

费马小定理:如果a是一个整数,p是一个质数,那么有a^p \equiv a \pmod{p}。也就是说a的p次方与a对p同余。

所以97的59次方对59取余=97%59=38

如果a不是p的倍数,这个定义也可以写成:

a^{p-1} \equiv  1 \pmod{p} 如果a与p互质,那么a的p-1次方对p取模的结果是1.

2,int a=1000000000, b=2000000000; a=a+b;b=a-b;a=a-b; 最后a,b是多少?

  a=a+b;b=a-b;a=a-b是交换a与b的算法。

所以,现在a=20000000000,b=10000000

3,如何判别一个数是unsigned

a>=0 && ~a>=0,如果a不是unsingned那么a>=0必有最高位为0,取反必为1,那么肯定变为负值,矛盾,所以a为unsigned。

无符号数最高位不代表符号位。

a>=0 && -a>=0 不满足,可以举一个反例0.

4,100层楼,两个鸡蛋。某层之上扔鸡蛋就会碎。最坏情况下,问至少要测试多少次才能试出这个层数。

它是问最坏情况下的最小测试次数。要想明白两个问题,一是怎么测试,二是怎么才是最坏情况。

加入在50层楼扔第一个鸡蛋,碎了,那就只能从1层逐层扔,这是最坏的情况是在49层第二个鸡蛋碎了,这就扔了共50次鸡蛋。如果50层的没碎,最坏情况就是第100层第二个鸡蛋才碎或是没碎,这也需要扔50次。

如果先在第10层扔,碎了从第1层开始扔第2个鸡蛋,没碎在从第20层扔第一个鸡蛋,然后30层,40层,也就是每次卡在一个10层的区间测试,这样做的最坏情况在第99层,共扔了10+9=19次鸡蛋。

10层10层的卡区间,问题就在于每往上走一个区间,扔的次数就会比上一次多一个,所以要想每个区间扔的次数一样多,那么区间值就必须每次减少1。假设开始是x层,下次就到x+(x-1)层...,最后x+(x-1)+(x-2)+...1>=100。这个和应该大于等于100,应该找这个最小的x,这个值是14.

5,25匹马,每次比赛可选5匹马赛出次序(无法计时)。问至少要比赛多少次才能确定跑得最快,次快和第三快的三匹马。

7次。首先分为5组,每组进行一次比赛,然后每组的头一名共五匹马比赛一次。假设第一组快于第二组快于第三组依次。最后一次安排第一组的二三名和第二组的一二名和第三组的第一名。

6,上台阶,每次可走一台阶和两台阶,问上10个台阶有多少种走法

f(10)=f(8)+f(9)=89

---------------------------------------

1,经过最少多少次比较能找出1000个元素中second smallest的一个?

用n个节点作为树叶建立竞赛树,两两比较,谁小谁胜出。最后的胜者为smallest,内部节
点的次数为n-1,即为比较次数。

因为在比较的过程,second smallest的只可能输一次,这一次就是跟smallest元素比较时
的产生的。所以把跟smallest比较的过的数拿出来,一共是 ceiling(lgN) (树的高度),这
些数中最小的就是second smallest.我们可以用前面同样的办法,用这ceiling(lgN)个数
建立竞赛树,求得最小的,比较次数为ceiling(lgN)-1

所以总的比较次数最多为 n+ceiling(lgN)-2

2,10个口袋每个有100个金币,其中一个口袋每个金币9grams,其余正常的金币都是10grams。有个天平,问最少几次可以找出那个口袋  

10个口袋依次取 0 1 2 3 4 5 6 7 8 9 个金币,称一次看看比 9*10/2*10 缺多少就知道了

这题目的解法真妙!

3,实验室里有1000个一模一样的瓶子,但是其中的一瓶有毒。可以用实验室的小白鼠来测试哪一瓶是毒药。如果小白鼠喝掉毒药的话,会在一个星期的时候死去,其他瓶子里的药水没有任何副作用。请问最少用多少只小白鼠可以在一个星期以内查出哪瓶是毒药

这题真够经典的,就今年校招,我都见过好多次了。

1000个瓶子,用二进制编码,即0000000001~11111101000。然后给老鼠编号1-10,1号老鼠喝瓶子编号第一位是1的瓶子。2号老鼠喝瓶子编号第二位为1的瓶子,以此类推。假设3,4,5号老鼠死了,即第0000011100=28号瓶子有毒。因为只有28号瓶子被3,4,5号老鼠同时喝了。

 

 

 

posted @ 2013-11-26 00:00  orchid  阅读(676)  评论(0编辑  收藏  举报