2013-5-5阿里巴巴实习生部分笔试题

单选题:

1.下列说法错误的是_

A....                       B....                             C.千兆网卡的读写速度是1Gb/s.                    D.DDR3内存的速度是100Gb/s

2.下面不能用作linux进程间通信的是_

A.共享内存         B.管道名    C.信号量     D.临界区

3.CPU和I/0一次只能处理一个程序,现有

P1:计算40ms   I/o80ms  计算40ms

P2: 计算120ms  I/o20ms  计算40ms

p3:计算60ms    I/o40ms   计算60ms

 记不清楚了,求并行处理节约的时间

4.两个进程同时执行一个函数,初始a=0:

void  f()

{

if(a<=0)

a++;

else

a--;

printf("%d",a);

}

问结果可能值不可能是_

A.01     B.10   C.12    D.22

5.长度为n的字符串匹配子串长度为m的字符串,求算法的复杂度最小为_

A.O(n)    B.O(n+m)     C.O(n+logm)       D.O(m+logn)

6.下列排序算法中最坏复杂度不是n(n-1)/2的是_

A.快速排序     B.冒泡排序   C.直接插入排序   D.堆排序

8.射击3次打靶成功的概率是0.95,打靶一次成功的概率是多少?

0.63

多选题:

1.一个栈,输入序列为:1,2,3,4,5,6。输出结果不可能是_

A.1,2,3,4,5,6  B....C......D......

2.下列能交换a和b的选项是:

A.

{

a=a+b;

忘了,有或运算

3.数星星,一次只能数20<=k<=30,两个人数星星,最后一个数完的获胜,下列星星数目能使第一个人数的人获胜的是_

A.2013   B.2886  C.4026   D......E.....

大题:

1. 补全反转数组的代码,如A{1,2,3,4}反转之后A{4,3,2,1}

void f(int *A,int n)

{

int i,temp;

for(i=0;i<n/2;i++)

{

temp=a[i];

a[i]=a[n-i-1];

a[n-i-1]=temp;

}

2.有N(N>4)个战士,每个人情报不同,两两交换之后最后要使每个人知道所有人的情报,请设计算法,不要求写代码,并求出最小的交流数目。

我穷举了几个,规律大概是这样当N%4==0时,交流次数是2*N-4,否则是2*N-3


 

3.有N个人,其中一个是明星,N-1个群众,明星不认识一个群众,但群众都认识明星,群众是否认识不知道,请设计最优算法,不要求写代码,并分析算法复杂度。

就是求一堆数里的最小数,每个群众认识的人数都大于0,而明星认识的人数为0。

void findmin(int *a,int n)
{  int i,find=0;
   for(i=1;i<n;i++)
   {
 if(a[find]>a[i])
 {
  find=i;
 }
   }
 printf("%d\n",find+1);
}

复杂度为O(n);

4.有n个仓库组成一个圆环,储货量不知道,先要使n个仓库的储货量都相同,货物只能在相邻节点间运输,设计最小运费的算法写出代码。

 

只记得这么多了,知道答案的麻烦留言

你可能感兴趣的:(2013-5-5阿里巴巴实习生部分笔试题)