2019 CCF非專業級別軟件能力認證第一輪 (CSP-J)入門級 C++答案及解析


此為天天快樂編程2020年OI集訓隊 訓練4,本次訓練題目為2019CSP認證J組原題。
當年浙江J組入圍線80分,入圍人數共1146名,有效參加共5848人。
試卷下載

一、單項選擇

1. 答案:A

解析:.cn是中國的頂級域名,屬於基本常識。

2. 答案:D

解析:邏輯與同時為1即為1,答案為D。

3. 答案:C

解析:1字節是8位,32位即4字節,int類型就是32位有符號整數。

4. 答案:A

解析:程序執行c次,每次-1,為a-c

5. 答案:A

解析:第一次(1+100)/2 = 50,第二次(1+50)/2 = 25, 第三次(1+25)/2 = 13, 第四次(1+13)/2 = 7, 第五次(1+7)/2= 4, 第六次(1+4)/2 = 2, 第七次(1+2)/2 = 1。
每次 / 2相當於 * 2,2^ 7是128,所以可以直接得到。

6. 答案:D

解析:鏈表沒有下標,不可以隨便訪問,其他特點均有。

7. 答案:C

解析:也就是8拆成至多5個數之和(不計順序),可按袋子個數分類討論:1個袋子1種,2個袋子4種,3個袋子5種,4個袋子5種,5個袋子3種,共18種。

8. 答案:C

解析:最大值是最深的那層最靠右側的節點,編號為((1 * 2 + 1) * 2 + 1) * 2 + 1=15

9. 答案:B

解析:97沒有除了1和它本身的因子。

10. 答案:C

解析:可以用輾轉相除法進行求解,最大公約數為:(319,377)=(319,58)=(58,29)=29

11. 答案:C

解析:設方案1,2各x,y天,由題意,3 * x +5 * y <= 21,x + y <= 7,y <=3. 求300i+600j的最大值。枚舉所有情況,當i=2, j=3時,最大值2400。也可以使用線性規划,這個題目稍微難一些。

12. 答案:A

解析:鴿巢(抽屜)原理,13張牌最壞情況就是4種花色分別為3,3,3,4張,至少4張一個樣花色。

13. 答案:C

解析:前兩位有5種選法,分別是(0,1,6,8,9);第3位有3種,分別是(0,1,8);第4, 5位由前2位決定,答案為5 * 5 * 3 * 1 * 1=75

14. 答案:B

解析:要根據后續和中序求出這個棵樹,后序是“左右根”,中序是“左根右”,中序中DBGEHJ是左子樹,CIF是右子樹,不斷遞歸下去。

再看右子樹的后序遍歷為IFC,可以確定C為右子樹的根結點;再加上中序為CIF,說明C無左子樹,只有右子樹。
而左子樹的后序遍歷為DGJHEB,因此B為左子樹的根結點,再結合中序遍歷,可以得知B的左子樹只有D,GEHJ都是右子樹。
GEHJ子樹的后序遍歷是GJHE,說明E是根,HJ為E的右子樹,G是E的左子樹。最后可知H為HJ子樹的根,J為右子樹。

通過以上分析,可以繪制出這棵樹,如圖所示。
在這里插入圖片描述

再前序遍歷可以得到ABDEGHJCFI。這個題目稍微難一些。

15. 答案:A

解析:魯班獎是國內建設工程;諾貝爾獎為物理、化學、醫學、文學、和平;普利策獎是新聞獎,圖靈獎由美國計算機協會(ACM)於1966年設立,專門獎勵那些對計算機事業作出重要貢獻的個人。

二、閱讀程序

16. 這段代碼是將字符串下標是n的約數位置的小寫字母轉大寫。

1)答案:錯

解析:輸入的字符串也可以包含數字以及其他字符。

2)答案:對

解析:除數不能為0,%0會發生Runtime Error(DIVIDE_BY_ZERO) //除零。

3)答案:錯

解析:循環條件為<=n, 也就是n也會執行到。同時 n%n==0恆為True,所以修改后少了n這次循環,也就會改變結果了。

4)答案:對

解析:因為大寫的ASCII值比較小,也就是從c>=a恆為False,所以s的值不會改變。

5)答案:B

解析:18=2 * 3 ^ 2, 根據歐拉函數,因數個數為 (1+1) * (1+2)=6。也就是判定條件最多滿足6次,所以最多有6 個

6)答案:B

解析:100000 = 2 ^ 5 * 5 ^ 5, 根據歐拉函數,因數個數為 (5 + 1) * (5 + 1) = 36,也即是判定條件最多滿足36次。

17.這是一個將a數組和b數組進行連接的代碼,如果兩個已經連接,會斷開存儲小的。

1)答案:對

解析:由限定條件可知,0<x,y<= n, 當m大於0時,一定存在某個數被選中,使得 ans<2*n。

2)答案:錯

解析:數對是一個左值與一個右值相匹配,所以ans最終一定是偶數,但是第27行的”++ans“在23行循環內部,其中間結果可能是負數。

3)答案:錯

解析:當m為1,並且輸入x=1,y=1的時候,可以使得a[1]和b[1]同時為1。

4)答案:錯

解析:當m為2, 並且輸入x=1,y=2.x=1,y=3的時候

5)答案:A

解析:如果各不相同的話,m次循環,會導致2m個位置從0變到整數,答案為2n-2m

6)答案:A

解析:m個都不相同的話14行和16行不會執行,y都相同的話b[y]中會保留最小的一個x,所以只存了一組值,空着2n-2

18.構造數列a的笛卡爾樹(根節點最小且保持中序遍歷),並求節點深度與b的加權和

1)答案:錯

解析:每次找a數組中第一次出現的最小值,即使有重復的數不會導致程序出錯

2)答案:對

解析:因為遞歸最底層l>r返回0,而倒數第二層返回值是0+0+depth*b[mink],如果b是0的話也是0,以此類推,返回結果總是0

3)答案:A

解析:最壞情況下a有序,mink每次都切在一段,遞歸進行100層,執行次數為100+99+, +…1約等於5000。

4)答案:D

解析:最好情況下,每次都均分,每層遞歸總次數為 100,層數為logn約等於6,總次數月6 * 100=600。

5)答案:D

解析:n=10時,深度最大能夠達到10,最大輸出為1 * b[0]+2 * b[1]+...+10 * b[9]=1 * 1 + 2 * 2 + 3 * 3 + 4 * 4 + 5 * 5 + 6 * 6 + 7 * 7 + 8 * 8 + 9 * 9 + 10 * 10 = 385

6)答案:B

解析:b=1,即求一個100節點的二叉樹,節點深度之和最小。可以使用貪心,100節點的完全二叉樹最小。1 * 1+2 * 2+4 *3 +8 * 4+16 * 5+32 * 6+37 * 7=580
這個題目比較難
三、完善程序

19.遞歸是非常容易考察的一個算法,遞歸和分治思想聯系緊密,我們往往會用遞歸去實現分治,比如漢諾塔。

1)答案:C

解析:遞歸邊界,res只有這一處賦值,BD顯然錯。n%2的話01只跟n有關,錯,因此只有t是對的

2)答案:D

解析:坐上角坐標。分別是左上,左下,右上,右下四個子矩陣。

3)答案:B

解析:右下角坐標。

4)答案:B

解析:由數字 0 變化來的矩陣,因此遞歸函數的初始參數為 n, 0

5)答案:B

解析:size也就矩陣的邊長,為2的n次方,用位運算也就是1<<n

20.本題是經典排序算法的考察,對於不熟悉計數排序算法的同學來說有難度,這種排序題目自己可以用模擬法。把數據帶進去算一下看看這個算法是怎么運行的。

1)答案:B

解析:此處是對第二關鍵字進行計數排序。題目中給出提示,先按第二關鍵字排序。並且根據填空2對ord進行更改,可知此時是対第二關鍵字進行排序。

2)答案:D

解析:cnt[b[i]]表示按第二關鍵字,第i個數排第幾位。ord[i]表示第i小的數在原序列的位置

3)答案:C

解析:對第一關鍵字計數,並做各關鍵詞的數量統計工作,因此將a[i]對應的元素數量自增一。

4)答案:A

解析:對應填空② ord[i]記錄了第二關鍵字第i小的數在原序列的位置。此時res[i]記錄了第一關鍵字第i小的數在原序列的位置。

5)答案:B

解析:此處是按順序輸出排序結果,由於之前已經按照第二、第一關鍵字進行計數排序,所以此時第i 個元素的原始下標為 res[i]。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM