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
基数排序不需要关键字比较
(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