CSP-S 2019 RP++!
眾所周知,NOIP屍體尚熱,亡魂未散,CCF開辦了CSP-S 2019初賽模擬賽。
這是我瞎寫的第二份試卷題解,順便復習。(什么?第一份?好難的!)
單選題(1)某計算機的 CPU 和內存之間的地址總線寬度是 32 位(bit),這台計算機最多可以使用( )的內存。
A. 2GB B. 4GB C. 8GB D. 16GB
[解析] 32位(bit),即$2^{30}$字節(byte)。
$1 GB=1024 MB=1024*1024 KB=1024*1024*1024 byte=2^{30} byte$
$32 bit=2^{32} byte=2^2*2^{30} byte=4GB$
[答案] B
單選題(2)下面屬於解釋執行的程序設計語言是( )
A. C B. C++ C. Pascal D. Python
[解析] 解釋執行語言:Python,JavaScript,C#,PHP,Basic,VBScript……
編譯執行語言:C,C++,Objective-C……
[答案] D
單選題(3)二進制數 00101100 和 01010101 異或的結果是( )
A. 00101000
B. 01111001
C. 01000100
D. 00111000
[解析] 根據二進制異或“相同為1,不同為0”的規則,進行異或:
$00101100$
$01010101$
得:$01111001$
[答案] B
單選題(4)與二進制小數0.1相等的八進制數是( )
A. 0.8 B. 0.4 C. 0.2 D. 0.1
[解析] 由二進制的特點可知,$(0.1)_2=(0.5)_10=(0.4)_8$。
[答案] B
單選題(5)設某算法的時間復雜度函數的遞推方程是$T(n)=T(n-1)+n$($n$為正整數)及$T(0)=1$,則該算法的時間復雜度為( )
A. $O(log n)$ B. $O(n log n)$ C. $O(n)$ D. $O(n^2)$
[解析] 顯然,$T(n)=T(n-1)+n$
$=n+(n-1)+(n-2)+……+1$
所以復雜度為$O(n^2)$
[答案] D
單選(6)表達式$a*(b+c)-d$的后綴表達形式為( )
A. abcd*+- B. abc+*d- C. abc*+d- D. -+*abcd
[解析] 關於中綴表達式轉后綴表達式的方法,我讀過很多人的做法,幾乎都需要用到棧,在初賽中這種步驟較為繁瑣。
這里有一種不用棧的手算方法,比較簡單,可以詳見這篇dalao的博文:中綴表達式轉后綴表達式
概括一下,方法就是:先按運算符優先級對每個式子加括號,然后將運算符移到它后面的括號后面就行了。
[答案] C
單選(7)一棵二叉樹如下圖所示,若采用二叉樹鏈表存儲該二叉樹(各個結點包括結點的數據、左孩子指針、右孩子指針)。如果沒有左孩子或者右孩子,則對應的為空指針。那么該鏈表中空指針的數目為( )
A. 6 B. 7 C. 12 D. 14
[解析] 這題我們只需要會數數外加認真作答就可以答對。圖中有3個點沒有兒子,有1個點只有1個兒子。所以空指針數目:$3*2+1*1=7$。
[答案] B
單選題(8)以比較作為基本運算,在$N$個數中找最小數的最少運算次數為( )
A. $N$ B. $N^2$ C. $N-1$ D. $log N$
[解析] 眾所周知,要找$N$個數的最小數,是必須得遍歷一遍這$N$個數的(否則拿異能感應最小數嗎)。
而此題“以比較作為基本運算”,找最小數只需要比較$N-1$次,因為自己和自己不必比較。
[答案] C
單選題(9)在有$n$個子葉節點的哈夫曼樹中,其節點總數為( )
A. $2^{n-1}$ B. $2n-1$ C. $2n+1$ D. $2n$
[解析] 哈夫曼樹是一種特殊樹形(是二叉樹,至少可以看得出來,本題出題人希望我們認為這是一種二叉樹),這種樹只存在出度為$0$或$2$的節點。
可以長這樣,也可以長成其他模樣:
很顯然,葉子節點為$n$,即為出度為$0$的節點數為$n$,根據哈夫曼樹的特性,可以知道出度為$1$的節點數為$n-1$。所以總數為$2n-1$
[答案] B
單選題(10)G是一個非連通簡單無向圖,共有28條邊,則該圖至少有( )個頂點。
A. 10 B. 9 C. 8 D. 7
[解析] 因為題目要求求最少頂點數,而完全連通圖頂點最少,所以先假設28條邊構成一個完全連通圖。
設該完全連通圖頂點數為$n$。${n*(n-1)}/{2}=28$,解之得,$n=8$。
又因為這是“非聯通簡單無向圖”,所以再加一個游離在外的點,則該圖至少有$9$個頂點。
[答案] B
(未完待續……甚至不知道什么時候能續)