1. 程式人生 > 實用技巧 >2018普及組初賽試題詳解

2018普及組初賽試題詳解

溫馨提示:請在觀看本題解時配合題目觀看

1.D(地球人都知道)

2.D
解析:可以選擇將所有的其他進位制換為10進位制,10進位制轉多進位制以及多進位制轉十進位制方法如下:

十進位制轉多進位制:

設該十進位制數為N,要化為H進位制

用H不斷除以N,直到N為0為止,在整個過程中記下餘數並按順序排列,最後將該序列倒過來就是H進位制下的N
舉個例子:

接下來要把37換成2進位制
37=2*18+1
18=2*9+0
9=2*4+1
4=2*2+0
2=2*1+0
1=2*0+1
故在二進位制下37為100101 

多進位制轉十進位制

設該進位制數為N

從0開始,從個位依次向高位寫數,可以把數寫在該位數字的上面,如下

我們寫的數\(\mathsf{9876543210}\)
被化進位制數\(\mathsf{1001101011}\)

設被化進位制數上的某一位為a,它上面的數為b(就是所對應的我們寫的數),該被化進位制數的進製為N,則我們可以得到一個式子:\(N^b*a\),把每一位都這樣處理,得到的結果加起來,就是我們要得到的對應的十進位制數,即:
\(\sum_{i=1}^nN^{b_i}*a_i\)
這個就是我們所要求的十進位制數。
用上面的例子舉例:
\(2^9*1+2^6*1+2^5*1+2^3*1+2^1*1+2^0*1\)即是我們所求的結果

如果是小數轉化進位制,那就與整數相反,在整數化進位制的過程中,把取餘運算化成乘法運算,乘H,不是取餘數而是取整數部分,然後順序排列。例如:

0.375   
*2    0.75     0
*2    1+0.5    1
*2    1+0      1
所以0.375的二進位制是0.011 

而對於H進位制化10進位制,則從個位上的0往後寫,依然和以前一樣\(\sum_{i=1}^nN^{b_i}*a_i\),只不過是負指數冪的運算。這裡不再贅述。

3.D
TP>GB>MB>KB>B並且其中的進位制是1024

4.B
廣域網WAN,都會網路MAN,區域網LAN

5.B
1984年中國計算機學會創辦全國青少年計算機程式設計競賽

6.A

7.A
深度為h的滿k叉樹,每一層的節點數為(設該層數為a)\(k^a\),注意,該層的層數等於其深度加一。
那麼累加一下,便可以得到結果\((k^{h+1}-1)/(k-1)\)

8.A
基數排序不需要關鍵字比較

9.A
連結:https://www.nowcoder.com/questionTerminal/85d2b9941f4342639684da19900cf0d1?orderByHotValue=1&mutiTagIds=1208&page=1&onlyReference=false
來源:牛客網

(1)n為奇數
演算法思路:選定陣列第一個元素為最大值max和最小值min,對剩餘的n-1個元素按照每兩個元素進行分組,首先對每個分組裡面的兩個元素進行對比,得到當前分組中最大值temp_max和最小值temp_min,然後用最大值max與當前分組中最大值temp_max做對比,用最小值min與當前分組中最小值temp_min做對比,分別更新最大值max和最小值min,按照步長為2,向後推進,直到遍歷完陣列
比較次數=3*(n-1)/2,解釋:每個分組兩個元素進行對比,對比次數為n-1/2,得到n-1/2個最大值temp_max和最小值temp_min,再用最小值min與所有的temp_min,最大值max和所有的temp_max做對比得到最後的最大值和最小值,次數都為n-1/2,所以最後總的次數為3*(n-1)/2。
(2)n為偶數
演算法思路:對陣列按照每兩個元素進行分組,取第一個分組中的較大值為最大值max,分組中的較小值作為最小值min,然後用max和剩餘n-2/2組產生的temp_max做對比,min和剩餘的n-2/2組產生的temp_min做對比,得到最終的最大值和最小值
比較次數:分組中每個組中的兩個元素進行對比次數為n/2,用第一組的較大值和剩餘n-2/2組的較大值對比,次數為n-2/2,用第一組的較小值和剩餘n-2/2組的較小值對比,次數為n-2/2,所以總次數為n/2+(n-2)/2*2=3n/2-2
所以最終答案為A

解析:
如果分別找最大值、最小值,則至少都需要N-1次操作。
同時找最大最小值,有更優化的方法,如果沒有學過這個演算法,本題只能根據題面猜測肯定小於2N-2,需在A和B裡面蒙一個,50%機率。
學過的話,按照下面的優化演算法:
N為奇數時,比較次數為3(N-1)/2 =(3N+1)/2 - 2
N為偶數時,比較次數為1 +3
(N-2)/2 = 3N/2 – 2
綜合奇偶,顯然答案為A
找最大最小值的優化演算法:
初始值:
N為奇數,最大值、最小值的初始值都設為第一個元素。
N為偶數,將前兩個元素比較,最大值初始值為大的元素,最小值初始值為小的元素。
列舉,每次兩個元素(迴圈步長為2)
比較兩個元素,分出大小。
大的元素與最大值比較,比最大值大則設為該元素。
小的元素與最小值比較,比最小值小則設為該元素。
迴圈結束,得到最大、最小值。
https://www.cnblogs.com/littlehb/p/10625192.html

其實可以找幾個數試一下

10.B

11.A
自己畫一畫就知道了,注意不要畫重複

12.B
一個具有N個元素的集合的子集數為\(2^N\),而由7個元素的子集數為C(N,7)(排列組合),所以答案為B

13.B
把10000所有的因子列出來,再減去,注意處理重複的部分,即及能被2整除,又能被5整除的數

14.B
如果實在不知道就找幾個數試一下,x &= x - 1的作用是去掉末尾的1

15.B

16.ABBB
假設排除即可

17.224
1-9中:1個

10-99中:1*8+10=18個

100-999中:(1+18)*8+100=252個

1000-1999中:1+18+252=271個

2000-2018中:2個

總共 1+18+252+271+2=544個
https://www.cnblogs.com/littlehb/p/10625192.html