一 單項選擇題: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: