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


試卷下載
浙江入圍線為77.5分,入圍人數共805名,有效參加共5517人。

一、單項選擇題

1. 答案:A

解析:每個存儲單元都會被分配一個地址,我們可以訪問物理地址進行讀取/寫入數據。

2. 答案:A

解析:編譯器的作用

3. 答案:D

解析:^為與,V為或,只有D正確。

4. 答案:C

解析:每個像素占32位,4字節。2048*1024個像素占2048 * 1024 * 4 / 1024 / 1024=8M

5. 答案:C

解析:這個是進行優化的冒泡排序。不優化的冒泡排序是這樣的,我們需要n-1趟排序,第i趟我們就可以排好第i大的位置(1<=i<=n-1),所以我們每次僅需要排第一個到n-i+1的即可。
然后我們再來看題目的偽代碼,設置一個flag從n開始,直到flag為1才結束。每次k=flag-1,也就是需要排序的倒數第二個,並設置flag=1。然后從頭到需要排序的,如果前面的大那么就交換,並記下flag。那么下一次循環就會從更新的flag開始。那如果已經從小到大排好序了,那么也不會交換,也不會更新flag,直接就結束循環了。

6. 答案:B

解析:temp為遞歸調用前n-1個求得的,如果temp小於A[n],答案就是temp,否則為A[n],這是找小的。遞歸下去,就找到最小的了。

7. 答案:A

解析:原題警告,鏈表就是為了解決數組插入刪除需要移動元素以及擴展麻煩的這個問題,當然也帶來了不可隨機訪問的問題,他是用指針進行存儲的,存儲的是下一個的位置。

8. 答案:A

解析:也就是形成一棵樹的時候,樹每兩點均聯通。

9. 答案:A

解析:8+2+1=11

10. 答案:A

解析:將兩個雙胞胎捆綁到一起,進行排序A(4,4),雙胞胎兩個人也有2種站法,A(4,4) * 2 =48

11. 答案:A

解析:先進先出為隊列,先進后出為棧。

12. 答案:D

解析:獨根樹的高度為1,就告訴你高度從1開始計,我們直接按照完美二叉樹(滿二叉樹)進行計算,也就是找2的幾次方-1 <= 61,為6

13. 答案:C

解析:1949%10=9,1949%12=5,也就是己丑,這一年新🇨🇳成立

14. 答案:A

解析: 10個三好學生,中間有9個空,每個班至少有1個名額,我們只要把板子放進空里就能保證。填上6個空就能分為7個組合,也就是C(9,6)=C(9,3)=84
另附上常見的組合數學題目(建議可以自己推一下常見的玩玩):

15. 答案:A

解析:首先我們先從5副手套中選2副手套,也就是C(5,2),接着我們從剩下的6只中選擇4只C(6,4)=C(6,2),而且不能成對-3,也就是C(5,2)*(C(6,2)-3)

二、閱讀程序

1.字符串解碼題,k首先統計有多少個encoder有值,這個0是沒有單引號的,也就是'\0',字符串結尾,那么第14行時k=3,之后再判斷encoder[i]是不是和字符值相等,沒有A,A被填寫;沒有B,B被填寫;有C就不會寫,依次填完為"CSPABDEFGHIJKLMNOQRTUVWXYZ",之后會再轉換為decoder,也就是以encoder作為位置,為"DEAFGHIJKLMNOPQCRSBTUVWXYZ"。之后在進行轉換。這個題目還是比較簡單的

1) 答案:對

解析:如果為小寫字母'a',下標就為32,越界了

2) 答案:錯

解析:如果輸出字符串"W",沒被編碼,原樣輸出。

3) 答案:對

解析:僅有前三個滿足條件,多余的不執行也可以

4) 答案:錯

解析:更改后,剩下的就沒有值了,也就是0

5) 答案:A

解析:想要輸出ABC,那么就要有C、S和P,很優秀的彩蛋

6) 答案:D

解析:想輸出CSP呢,就要輸入P、R和N

2.我們可以先看第4題,看題的過程中還能解決一道題目,輸入之后執行n次,第一次會把d[0]++,然后看一下[0,len-2]是否有1,循環沒有,那看最后一個有1,那么1往后挪,答案+1,長度+1,下一次繼續看,還是沒有,執行n次,每次都+1,所以答案就為D。

所以n僅僅是控制次數,每次都加到第一個上面,k是和d[i]進行比較的,超過k就往后移,那么會不會是統計n用k進制表示進位的次數,也不清楚,可以看看第5題再決定。3 ^ 1產生1次進位,3 ^ 2產生4次進位,沒問題啊,所以確實為這個。3 ^ 30會產生幾次呢,和等比數列有關,首項是1,末項是q ^ (n-1),即(a1 - q ^ (n-1) * q) / ( 1 - q )=(q ^ n -1)/( q - 1)

1) 答案:錯

解析:可以用特殊樣例試一下,比如n=1,len=2

2) 答案:錯

解析:若輸入n=k=2,肯定可以進位,len=2,ans=1

3) 答案:對

解析:len位填不滿,所以k的len次方一定大於n

4) 答案:D

解析:見題目分析。

5) 答案:B

解析:等比數列求和

6) 答案 D

解析:考慮更為一般的算進位,也就是把n/10+n/100+n/1000+...+n/100 000 000 000 000算出來,算出來為D

3.這個題目還是有些麻煩的,abs()是絕對值函數,求的d[i-1][1]和d[i][1]的絕對值。他其實是一個合並的操作。是我們每次選原序列里的某個數對,然后把它合並到他當前的前n項,把它后面的挪過來,放到他前面,做一個遞歸。

1) 答案:錯

解析:輸入n為0,14行的循環條件也不滿足,是錯誤的。

2) 答案:對

解析:a、x和b、y為0,sum是差,所有的差均為0,所以為0

3) 答案:錯

解析:n=1,d[i][0]和d[i][1]均比較大,ans反而變小

4) 答案:B

解析:這個題要把數據帶進入模擬一下,每次都是i=1的合並

5) 答案:C

解析:和上一題一樣,每次都是i=1走到下一層,

6) 答案:C

解析:這個題也是一樣的,i=1下一層,不斷模擬,所以這個題也不用懂代碼啊,直接模擬,大力出奇跡。

三、完善程序

1.質因數分解是一個常見的題目

1) 答案:C

解析:2是最小的素數,從2開始,從1開始直接死循環

2) 答案:C

解析:我們是優化過后的算法,也就是最后一個為sqrt(n)和i * i <= n等價,其他會有遺漏

3) 答案:C

解析:要把i這個質因子全部除光

4) 答案:A

解析:如果n > 1,那就說明還存在n這個大素數,沒有除干凈

5) 答案:C

解析:輸出n即可。

2.這個題目后幾題略微麻煩些,先排序,再貪心。貪心過程中用到的是線段覆蓋的思想。

1) 答案:B

解析:排序肯定先對左端點排序,再去調換位置。

2) 答案:D

解析:交換位置,也就是把t=其中一個,其中一個=另一個,另一個=t。

3) 答案:A

解析:線段如果不包含了就應該加上,也就是當前的右端點比最后一個右端點大,第一個肯定在。如果包含那就沒必要選擇了。

4) 答案:A

解析:q也就是我們循環的變量,從0開始,第一個肯定選,所以我們要看下一個是否比r還要小。看左端點還是右端點呢,r會記錄當前的右端點,那么只要我們的左端點<=右端點,一定是相交的(包含已經被過濾掉),相交就要繼續向下循環,也就在一個區間的。

5) 答案:B

解析:r會更新為當前的右端點


免責聲明!

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



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