轉自Eirlys_North,原網址https://blog.csdn.net/eirlys_north/article/details/52890002,有較多改動(0^_^0))
一、單項選擇題(共10題,每題1.5分,共計15分;每題有且僅有一個正確選項)
1.目前計算機芯片(集成電路)制造的主要原料是( ),它是一種可以在沙子中提煉出的物質。 A.硅 B.銅 C.鍺 D.鋁
A
送分題
2.( )是主要用於顯示網頁服務器或者文件系統的HTML文件的內容,並讓用戶與這些文件交互的一種軟件。 A.資源管理器 B.瀏覽器 C.電子郵件 D.編譯器
B
顯然=w=
3.目前個人電腦的( )市場占有率最靠前的廠商包括Intel、AMD等公司。
A.顯示器 B.CPU C.內存 D.鼠標
B
英特爾公司是美國一家主要以研制CPU處理器的公司,是全球最大的個人計算機零件和CPU制造商,它成立於1968年,具有46年產品創新和市場領導的歷史。1971年,英特爾推出了全球第一個微處理器
4.無論是TCP/IP模型還是OSI模型,都可以視為網絡的分層模型,每個網絡協議都會被歸入某一層中。如果用現實生活中的例子來比喻這些“層”,以下最恰當的是( )。
A. 中國公司的經理與波蘭公司的經理交互商業文件
B. 軍隊發布命令
C. 國際會議中,每個人都與他國地位對等的人直接進行會談
D. 體育比賽中,每一級比賽的優勝者晉級上一級比賽
A
網絡分層
OSI模型有7層結構,每層都可以有幾個子層。OSI的7層從上到下分別是 7應用層 6表示層 5會話層 4傳輸層 3網絡層 2數據鏈路層 1物理層
5.如里不在快速排序中引入隨機化,有可能導致的后果是( )。
A.數組訪問越界 B.陷入死循環 C.排序結果錯誤 D.排序時間退化為平方級
D
常識吧=w=
6.1946年誕生於美國賓夕法尼亞大學的ENIAC屬於( )計算機。
A.電子管 B.晶體管 C.集成電路 D.超大規模集成電路
A
顯然A,ENIAC是世界上第一台通用計算機,也是繼ABC(阿塔納索夫-貝瑞計算機)之后的第二台電子計算機。當然是電子管
7.在程序運行過程中,如果遞歸調用的層數過多,會因為( )引發錯誤。
A.系統分配的棧空間溢出 B.系統分配的堆空間溢出
C.系統分配的隊列空間溢出 D.系統分配的鏈表空間溢出
A
被報過錯的人都知道=w=,學過遞歸的都知道=w=(遞歸棧),死循環時報錯為空間超限而不是時間超限
8.地址總線的位數決定了CPU可直接尋址的內存空間大小,例如地址總線為16位,其最大的可尋址空間為64KB。如果地址總線是32位,則理論上最大可尋址的內存空間為( )。 A.128KB B.1MB C.1GB D.4GB
D
16位地址總線最大可尋址地址為2^32Bit=4GB
地址總線的位數決定了CPU可直接尋址的內存空間大小。比如8位微機的地址總線為16位,則其最大可尋址空間為2^16=64KB,16位微機的地址總線為20位,其可尋址空間為2^20=1MB。一般來說,若地址總線為n位,則可尋址空間為2^n字節。
9.以下不屬於3G(第三代移動通信技術)標准的是( )。
A.GSM B.TD-SCDMA C.CDMA2000 D.WCDMA
A
對於我個人來講,這是一道拼人品的題。
第三代移動通信技術(3rd-generation,3G),是指支持高速數據傳輸的蜂窩移動通訊技術。3G服務能夠同時傳送聲音及數據信息,速率一般在幾百kbps以上。目前3G存在四種標准:CDMA2000,WCDMA,TD-SCDMA,WiMAX。
10.仿生學的問世開辟了獨特的科學技術發展道路。人們研究生物體的結構、功能和工作原理,並將這些原理移植於新興的工程技術中。以下關於仿生學的敘述,錯誤的是( )
A.由研究蝙蝠,發明雷達 B.由研究蜘蛛網,發明因特網 C.由研究海豚,發明聲納 D.由研究電魚,發明伏特電池
B
這個錯的很明顯了吧....
二、不定項選擇題(共10題,每題1.5分,共計15分;每題有一個或多個正確選項,多選或少選均不得分)
1、如果對於所有規模為n的輸入,一個算法均恰好進行( )次運算,我們可以說該算法的時間復雜度為O(2^n) 。
A.2^(n+1) B.3^n C.n*(2^n) D.2^(2n)
A
顯然=w=,(D多了一個平方)
2. 從頂點0A出發,對有向圖( )進行廣度優先搜索(BFS)時,一種可能的遍歷順序是A0,A1,A2,A3,A4
A. B.
C.
D.
AD
學過bfs的水過就好
3.如果一個棧初始時為空,且當前棧中的元素從棧頂到棧底依次為a,b,c(如右圖所示),另有元素d已經出棧,則可能的入棧順序是( )。
A.a, b, c, d B.b, a, c, d C.a, c, b, d D.d, a, b, c
AD,顯然
4.在計算機顯示器所使用的RGB顏色模型中,( )屬於三原色之一。
A.黃色 B.藍色 C.紫色 D.綠色
BD,紅藍綠
5、一棵二叉樹一共有19個節點,其葉子節點可能有( )個。
A.1 B.9 C10 D10.5
ABC
最少一個,最多19-(19 div 2)=10個
6.已知帶權有向圖G上的所有權值均為正整數,記頂點u到頂點v的最短路徑的權值為d(u,v)。若v1v2v3v4v5 是圖G上的頂點,且它們之間兩兩都存路徑可達,則以下說法正確的有( )。
A.V1 到v2的最短路徑可能包含一個環
B.D(v1,v2)=d(v2,v1)=
C. D(v1,v3)<=d(v1,v2)+d(v2,v3)
D.如果v1->v2->v3->v4->v5是v1到v5的一條最短路徑那么v2->v3->v4是v2到v4的最短路徑
CD,沒有什么可多說的,有環顯然是不可以的,注意這是一個有向圖
7.邏輯異或(Å)是一種二元運算,其真值表如下所示。
以下關於邏輯異或的性質,正確的有( )。
A.交換律:a⊕b=b⊕a
B.結合律:(a⊕b)⊕c=a⊕(b⊕c)
C.關於邏輯與的分配律:a⊕(b∧c)=(a⊕b)∧(a⊕c)
D.關於邏輯或的分配律:a⊕(b∨c)=(a⊕b)∨(a⊕c)
AB
8.十進制下的無限循環小數(不包括循環節內的數字均為0成均為9的平凡情況),在二進制下有可能是( )。
A.無限循環小數(不包括循環節內的數字均為0或均為9)
B.無限不循環小數
C.有限小數
D.整數
A,顯然
9.( )是目前互聯網上常用的E-mail服務協議。
A.HTTP B.FTP C.POP3 D.SMTP
CD
常用的電子郵件協議有SMTP、POP3、IMAP4,它們都隸屬於TCP/IP協議簇,默認狀態下,分別通過TCP端口25、110和143建立連接
10.以下關於計算復雜度的說法中,正確的有( )。
A.如果一個問題不存在多項式時間的算法,那它一定是NP類問題
B.如果一個問題不存在多項式時間的算法,那它一定不是P類問題
C.如果一個問題不存在多項式空間的算法,那它一定是NP類問題
D.如果一個問題不存在多項式空間的算法,那它一定不是P類問題
BD
NP問題是指還未被證明是否存在多項式算法能夠解決的問題,而其中NP完全問題又是最有可能不是P問題的問題類型。這種可以在多項式時間內驗證一個解是否正確的問題稱為NP問題
P問題:P是一個判定問題類,這些問題可以用一個確定性算法在多項式時間內判定或解出
三.問題求解
1.本題中,我們約定布爾表達式只能包含p,g,r三個布爾變量,以及“與”(∧)、“或”(∨)、“非”(┐)三種布爾運算。如果無論p, q,r如何取值,兩個布爾表達式的值總是相同,則稱它們等價。例如,(p∨q)∨r和p∨(q∨r)等價, p∨┐p和q∨┐q也等價;而p∨q和p∧q不等價。那么,兩兩不等價的布爾表達式最多有______個。
256
其實我是不會算的,然后大神告訴我:
對於每個p、q、r只能取真、假兩種情況,共有八種組合,無論哪組組合都只有真假兩種結果,所以兩兩不等價的個數有2^8種(別問我所以是怎么來的=。=)
布爾運算表示方法
"∨" 表示"或"
"∧" 表示"且".
"┐"表示"非".
"=" 表示"等價".
1和0表示"真"和"假"
(還有一種表示,"+"表示"或", "·"表示"與")
2、對於一棵二叉樹,獨立集是指兩兩互不相鄰的節點構成的集合。例如,圖1有5個不同的獨立集(1個雙點集合,3個單點集合、1個空集),圖2有14個不同的獨立集。那么圖3有___個不同的獨立集。
5536
其實我還是不會做=。=
題解大人告訴我:這是一道動規題,所以永遠不要把初賽想得多么白痴=。=,
f[i] = g[i,0] + g[i,1] ( f[i] 表示以i為根節點的獨立集個數,1表示選,0表示不選);
顯然兩兩不相鄰,所以選根節點時,兩個子節點不能選;不選根節點時,直接是左右兒子相乘(根據計數原理可得)
即:g[i,0] = f[ left[i] ] * f[ right[i] ];
g[i,1] = g[ left[i],0 ] * g[ right[i],0 ] ;
從下往上編號,這樣根節點編號即為節點總數,求出f[17]即可;
四.閱讀程序寫結果
1.
1 #include <iostream> 2 using namespace std; 3 int n, i, temp, sum, a[100]; 4 int main() { 5 cin >> n; 6 for (i = 1; i <= n; i++) 7 cin >> a[i]; 8 for (i = 1; i <= n - 1; i++) 9 if (a[i] > a[i + 1]) { 10 temp = a[i]; 11 a[i] = a[i + 1]; 12 a[i + 1] = temp; 13 } 14 for (i = n; i >= 2; i--) 15 if (a[i] < a[i - 1]) { 16 temp = a[i]; 17 a[i] = a[i - 1]; 18 a[i - 1] = temp; 19 } 20 sum = 0; 21 for (i = 2; i <= n - 1; i++) 22 sum + = a[i]; 23 cout << sum / (n - 2) << endl; 24 return 0; 25 }
輸入:
8
40 70 50 70 20 40 10 30
輸出:_______
41(還是送分題,看清循環范圍即可)
2.
1 #include <iostream> 2 using namespace std; 3 int n, i, ans; 4 int gcd(int a, int b) 5 { 6 if (a % b == 0) return b; 7 else 8 return gcd(b, a%b); 9 } 10 int main() 11 { 12 cin>>n; 13 ans = 0; 14 for (i = 1; i <= n; i++) 15 if (gcd(n,i) == i) 16 ans++; 17 cout<<ans<<endl; 18 }
16(當看到gcd的時候就應該明白了一切)
3.
1 #include <iostream> 2 using namespace std; 3 const int SIZE = 20; 4 int data[SIZE]; 5 int n, i, h, ans; 6 void merge() 7 { 8 data[h-1] = data[h-1] + data[h]; 9 h--; 10 ans++; 11 } 12 int main() 13 { 14 cin>>n; 15 h = 1; 16 data[h] = 1; 17 ans = 0; 18 for (i = 2; i <= n; i++) 19 { 20 h++; 21 data[h] = 1; 22 while (h > 1 && data[h] == data[h-1]) 23 merge(); 24 } 25 cout<<ans<<endl; 26 }
(1)
輸入:8
輸出:_________
(2)
輸入:2012
輸出:_________
(1)7;(2)2004
第一組推一下應該都沒問題,至於第二組,我是找規律的
4.
1 #include <iostream> 2 #include <string> 3 using namespace std; 4 int lefts[20], rights[20], father[20]; 5 string s1, s2, s3; 6 int n, ans; 7 void calc(int x, int dep) 8 { 9 ans = ans + dep*(s1[x] - 'A' + 1); 10 if (lefts[x] >= 0) calc(lefts[x], dep+1); 11 if (rights[x] >= 0) calc(rights[x], dep+1); 12 } 13 void check(int x) 14 { 15 if (lefts[x] >= 0) check(lefts[x]); 16 s3 = s3 + s1[x]; 17 if (rights[x] >= 0) check(rights[x]); 18 } 19 void dfs(int x, int th) 20 { 21 if (th == n) 22 { 23 s3 = ""; 24 check(0); 25 if (s3 == s2) 26 { 27 ans = 0; 28 calc(0, 1); 29 cout<<ans<<endl; 30 } 31 return; 32 } 33 if (lefts[x] == -1 && rights[x] == -1) 34 { 35 lefts[x] = th; 36 father[th] = x; 37 dfs(th, th+1); 38 father[th] = -1; 39 lefts[x] = -1; 40 } 41 if (rights[x] == -1) 42 { 43 rights[x] = th; 44 father[th] = x; 45 dfs(th, th+1); 46 father[th] = -1; 47 rights[x] = -1; 48 } 49 if (father[x] >= 0) 50 dfs(father[x], th); 51 } 52 int main() 53 { 54 cin>>s1; 55 cin>>s2; 56 n = s1.size(); 57 memset(lefts, -1, sizeof(lefts)); 58 memset(rights, -1, sizeof(rights)); 59 memset(father, -1, sizeof(father)); 60 dfs(0, 1); 61 }
輸入:
ABCDEF
BCAEDF
輸出:__________
55(我看不下去了=A=)
五.完善程序
1、(排列數)輸入兩個正整數n,m(l≤n≤20,1≤m≤n),在1~n中任取m個數,按字典序從
小到大輸出所有這樣的排列。例如
輸入:3 2
輸出:1 2
1 3
2 1
2 3
3 1
3 2
1 #include <iostream> 2 #include <cstring> 3 using namespace std; 4 const int SIZE = 25; 5 bool used[SIZE]; 6 int data[SIZE]; 7 int n, m, i, j, k; 8 bool flag; 9 int main( ) { 10 cin >> n >> m; 11 memset(used, false, sizeof(used)); 12 for (i = 1; i <= m; i++) { 13 data[i] = i; 14 used[i] = true; 15 } 16 flag = true; 17 while (flag) { 18 for (i = 1; i <= m - 1; i++) cout << data[i] << " "; 19 cout << data[m] << endl; 20 flag = ①; 21 for (i = m; i >= 1; i--) { 22 ②; 23 for (j = data[i] + 1; j <= n; j++) 24 if (!used[j]) { 25 used[j] = true; 26 data[i] = ③; 27 flag = true; 28 break; 29 } 30 if (flag) { 31 for (k = i + 1; k <= m; k++) 32 for (j = 1; j <= ④; j++) 34 if (!used[j]) { 35 data[k] = j; 36 used[j] = true; 37 break; 38 } 39 ⑤; 40 } 41 } 42 } 43 return 0; 44 }
(1)false
(2)uesd[date[i]]=false
(3)j
(4)n
(5)break
2、
1 #include<bits/stdc++.h> 2 using namespace std; 3 const int NSIZE=100000,CSIZE=1000; 4 int n,c,r,tail,head,s[NSIZE],q[CSIZE]; 5 //數組s模擬一個棧,n為棧的元素個數 6 //數組q模擬一個循環隊列,tail為隊尾的下標,head為隊首的下標 7 bool direction,empty; 8 int previous(int k) 9 { 10 if (direction) 11 return ((k + c - 2) % c) + 1; 12 else 13 return (k % c) + 1; 14 } 15 int next(int k) 16 { 17 if (direction) 18 ①; 19 else 20 return ((k + c - 2) % c) + 1; 21 } 22 void push() 23 { 24 int element; 25 cin>>element; 26 if (next(head) == tail) 27 { 28 n++; 29 ②; 30 tail = next(tail); 31 } 32 if (empty) 33 empty = false; 34 else 35 head = next(head); 36 ③= element; 37 } 38 void pop() 39 { 40 if (empty) 41 { 42 cout<<"Error: the stack is empty!"<<endl; 43 return; 44 } 45 cout<< ④ <<endl; 46 if (tail == head) 47 empty = true; 48 else 49 { 50 head = previous(head); 51 if (n > 0) 52 { 53 tail = previous(tail); 54 ⑤ = s[n]; 55 n--; 56 } 57 } 58 } 59 void reverse() 60 { 61 int temp; 62 if (⑥== tail) 63 { 64 direction = !direction; 65 temp = head; 66 head = tail; 67 tail = temp; 68 } 69 else 70 cout<<"Error: less than "<<c<<" elements in the stack!"<<endl; 71 } 72 int main() 73 { 74 cin>>c; 75 n = 0; 76 tail = 1; 77 head = 1; 78 empty = true; 79 direction = true; 80 do 81 { 82 cin>>r; 83 switch (r) 84 { 85 case 1: 86 push(); 87 break; 88 case 2: 89 pop(); 90 break; 91 case 3: 92 reverse(); 93 break; 94 } 95 } 96 while (r != 0); 97 return 0; 98 }
(1)next=(k%c)+1;
(2)s[n]=q[tail];
(3)q[head]
(4)q[headl]
(5)p[tail]
(6)next(head)
——by Eirlys