2013-5-5阿里巴巴實習生部分筆試題-武漢

一 單項選擇題:html

1.下列說法不正確的是linux

A. SATA硬盤的速度大約爲500Mbpsios

B. 讀取18XDVD光盤的速度大約爲1Gbpsc++

C. 千兆網卡的數據讀寫速度是1Gbps算法

D. DDR3內存數據的速度是100Gbps小程序

答案選擇D。數組

註解:網絡

固態硬盤在SATA 2.0接口上平均讀取速度在225MB/S,平均寫入速度在71MB/S。而當更換到SATA 3.0接口後,平均讀取速度驟然提高至311MB/S,相比SATA 2.0足足提高近90MB/S的速度.在隨機文件存取測試中,採用SATA 3.0接口的成績依然要好於採用SATA 2.0接口的成績。尤爲在寫入4KB文件方面,SATA 2.0接口平均速度在50MB/S,而採用SATA 3.0後提高至70MB/S。app

B。DVD 的多少X速度指的是讀取數據的速度,不是指轉速。在保持讀取速度必定的前提下,讀取光盤內圈時須要的轉速會比讀外圈快,因此讀取速度和光驅轉速不能徹底對應,即便X速度不變,光驅的轉速會根據當前讀取指令和光盤的實際狀況不斷變化。理論上,光驅轉速的極限應該是不超過 10000轉/分鐘,超過這個數值的話,光盤的物理結構會沒法承受,光盤自己會容易損壞。DVD的1X至關於數據率爲 1350KB/秒 ,那麼18X就是24300KB/秒 。CD光驅的1X 是 150KB/秒,因此它的52X也只有 7800KB/秒。ide

D。普通的DDR3 SDRAM,電源電壓爲+1.5V,最大數據傳輸速度爲1.6Gbps

 

2.下面不能用做linux進程間通訊的是

A.共享內存         B.管道名    C.信號量     D.臨界區

答案D.

進程間通訊可使用的方式有:管道(命令管道和未命名管道),信號量,共享內存等,臨界區是線程同步的一種方式,Java中都有說起。

 

3.進程調度

設在內存中有P1,P2,P3三道程序,並按照P1,P2,P3的優先級次序運行,其中內部計算和IO操做時間由下表給出(CPU計算和IO資源都只能同時由一個程序佔用):

P1:計算60ms---》IO 80ms---》計算20ms

P2:計算120ms---》IO 40ms---》計算40ms

P3:計算40ms---》IO 80ms---》計算40ms

完成三道程序比單道運行節省的時間是()

A.80ms

B.120ms

C.160ms

D.200ms

答案C。

本身計算就能夠的結果了。、

4.進程同步,鎖機制

兩個進程同時執行一個函數,初始a=0:

void  f()

{

if(a<=0)

a++;

else

a--;

printf("%d",a);

}

問結果可能值不多是_

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

答案A。

 

5.算法分析

給定fun函數以下,那麼fun(10)的輸出結果是()

int fun(int x) {

return (x==1) ? 1 : (x + fun(x-1));

}

A.0

B.10

C.55

D.3628800

其實就是1+2+3+4+5,依舊累加的結果。

6.C++語言基礎

在c++程序中,若是一個整型變量頻繁使用,最好將他定義爲(D)

A.auto

B.extern

C.static

D.register

7.算法,串

長爲n的字符串中匹配長度爲m的子串的複雜度爲(B)

A.O(N)

B.O(M+N)

C.O(N+LOGM)

D.O(M+LOGN)

解析:

KMP算法

8.判斷一包含n個整數a[]中是否存在i、j、k知足a[i] + a[j] = a[k]的時間複雜度爲()

9.數學機率題

三次射擊能中一次的機率是0.95,請問一次射擊能中的機率是多少?(A)

A.0.63

B.0.5

C.**

D.0.85

解析:(1-P^3) = 1 – 0.95

  10.排序算法

下列序排算法中最壞複雜度不是n(n-1)/2的是()

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

二 多項選擇題
11 進程狀態

進程狀態轉換,下列轉換會發生的有() A就緒 運行     B運行 就緒 C運行  阻塞 D阻塞  運行  
12 棧

輸入序列爲一、二、三、四、五、6,通過入棧出棧後,出棧順序可能有: A 123465  B 154623  C 312546  D 325641  
13下列能交換兩變量值的有: A b=a+b; a=a+b; b=b-a; B a=a|b; b=b+a; a=b-a; C a=a-b; b=a+b; a=b-a; D a=a+b;b=a-b;a=b|a;  

14兩人數星星,每回數k個(20<=k<=30),設定數完最後一批的人獲勝。當A先數,則星星總數爲多少時,A才勝出 A 2013  B 2888  C 3935  D 4026  E 25051

 

3、填空問答題

1.給你一個整型數組A[N],完成一個小程序代碼(20行以內),使得A[N]逆向,即原數組爲1,2,3,4,逆向以後爲4,3,2,1

補全反轉數組的代碼,

   1: void f(int *A,int n)
   2: {
   3:     int i,temp;
   4: for(i=0;i<n/2;i++)
   5:  
   6: {
   7:  
   8: temp=a[i];
   9:  
  10: a[i]=a[n-i-1];
  11:  
  12: a[n-i-1]=temp;
  13:  
  14: }
  15:  
  16: }

這個多是常常考到的鏈表反轉護士鏈表逆序的一種簡化吧。

 

2.有個苦逼的上班族,他天天忘記定鬧鐘的機率爲0.2,上班堵車的機率爲0.5,若是他既沒定鬧鐘上班又堵車那他遲到的機率爲1.0,若是他定了鬧鐘可是上班堵車那他遲到的機率爲0.9,若是他沒定鬧鐘可是上班不堵車他遲到的機率爲0.8,若是他既定了鬧鐘上班又不堵車那他遲到的機率爲0.0,那麼求出他在60天裏上班遲到的指望。

 

3.戰報交流:戰場上不一樣的位置有N個戰士(n>4),每一個戰士知道當前的一些戰況,如今須要這n個戰士經過通話交流,互相傳達本身知道的戰況信息,每次通話,可讓通話的雙方知道對方的全部情報,設計算法,使用最少的通話次數,是的戰場上的n個士兵知道全部的戰況信息,不須要寫程序代碼,得出最少的通話次數。

有N(N>4)個戰士,每一個人情報不一樣,兩兩交換以後最後要使每一個人知道全部人的情報,請設計算法,不要求寫代碼,並求出最小的交流數目。

我窮舉了幾個,規律大概是這樣當N%4==0時,交流次數是2*N-4,不然是2*N-3

4.有N我的,其中一個明星和n-1個羣衆,羣衆都認識明星,明星不認識任何羣衆,羣衆和羣衆之間的認識關係不知道,如今若是你是機器人R2T2,你每次問一我的是否定識另一我的的代價爲O(1),試設計一種算法找出明星,並給出時間複雜度(沒有複雜度不得分)。

解答:這個問題等價於找未知序列數中的最小數,咱們將reg這個函數等價爲如下過程:,若是i認識j,記做i大於等於j,一樣j不必定大於等於i,知足要求,i不認識j記做i<j,對明星k,他不認識全部人,則k是其中最小的數,且知足其他的人都認識他,也就是其他的人都大於等於k.這樣問題就被轉換了。就拿N=5來講,首先有數組S[5]={A,B,C,D,E}這5個變量,裏邊存放着隨機數,求是否存在惟一最小數,若是存在位置在S中的哪裏。(樓主這裏是這個意思,按個人理解題中這個最小數必定是存在且惟一的)

   1: int finds(S,N)
   2: {
   3: int flag=0;//用於斷定是否有明星,即當前最小數另外出現幾回
   4: int temp=0;//存放最小數在S中的位置
   5: for(i=1;i<N;i++)
   6:
   7:  
   8: if(!reg(S[i],S[temp])//若是temp標號的數小於i標號的數
   9:  
  10:
  11:  
  12: temp=i;
  13:  
  14: flag=0;//更換懷疑對象(最小數)時,標記清零
  15:  
  16:
  17:  
  18:  
  19: elseif(reg(S[temp],S[i])//若是temp裏存放的確實是惟一最小數是不會跑進這裏來的
  20:  
  21: {
  22:  
  23: flag++;
  24:  
  25: ` }
  26:  
  27:
  28:  
  29: if(flag>0) return -1;//表示沒有明星,例如全部的數都相等
  30: return temp;//返回明星在S中的位置
  31: }

4、綜合題

有一個淘寶商戶,在某城市有n個倉庫,每一個倉庫的儲貨量不一樣,如今要經過貨物運輸,將每次倉庫的儲貨量變成一致的,n個倉庫之間的運輸線路圍城一個圈,即1->2->3->4->...->n->1->...,貨物只能經過鏈接的倉庫運輸,設計最小的運送成本(運貨量*路程)達到淘寶商戶的要求,並寫出代碼。

參考:http://www.cnblogs.com/JS-Shining/archive/2012/09/24/2700711.html

相似題目:有n個小朋友坐成一圈,每人有ai個糖果。每人只能給左右兩人傳遞糖果。每人每次傳遞一個糖果代價爲1,求使全部人得到均等糖果的最小代價。

分析:假設a1分給an的糖果數爲k,則能夠獲得如下的信息:

  a1              a2                       a3   an-1 an

當前數目:a1-k   a2 a3   an-1 an+k

所需代價:|a1-k-ave| |a1+a2-k-2*ave| |a1+a2+a3-k-3*ave||a1+..+a(n-1)-k-(n-1)*ave|   |k|

以sum[i]表示從a1加到ai減掉i*ave的和值,這以上能夠化簡爲

總代價 = |s1-k|+|s2-k|+...+|s(n-1)-k|+|k|

不難看出:當k爲s1...s(n-1)中的中位數的時候,所需的代價最小

代碼轉載於網絡:

   1:  
   2:  
   3:  
   4: #include <cstring>
   5:  
   6: #include <iostream>
   7:  
   8: #include <algorithm>
   9:  
  10: using namespace std;
  11:  
  12: const int X = 
  13: 1000005;
  14:  
  15: typedef long 
  16: long ll;
  17:  
  18: ll sum[X],a[X];
  19:  
  20: ll n;
  21:  
  22: ll Abs(ll x){
  23:  
  24: return max(x,-x);
  25:  
  26: }
  27:  
  28: int main(){
  29:  
  30: //freopen("sum.in","r",stdin);
  31:  
  32: while(cin>>n){
  33:  
  34: ll x;
  35:  
  36: ll tot = 0;
  37:  
  38: for(int 
  39: i=1;i<=n;i++){
  40:  
  41: scanf("%lld",&a[i]);
  42:  
  43: tot += a[i];
  44:  
  45: }
  46:  
  47: ll ave = tot/n;
  48:  
  49: for(int 
  50: i=1;i<n;i++)
  51:  
  52: sum[i] = 
  53: a[i]+sum[i-1]-ave;
  54:  
  55: sort(sum+1,sum+n);
  56:  
  57: ll mid = sum[n/2];
  58:  
  59: ll ans = Abs(mid);
  60:  
  61: for(int 
  62: i=1;i<n;i++)
  63:  
  64: ans += 
  65: Abs(sum[i]-mid);
  66:  
  67:  
  68: cout<<ans<<endl;
  69:  
  70: }
  71:  
  72: return 0;
  73:  
  74: }
  75:  
  76: Enjoy~
  77:  
相關文章
相關標籤/搜索