CSP-J 2024 入门级 第一轮试题(初赛)答案及解析

CSP-J 2024 入门级 第一轮试题(初赛)答案及解析

一、单项选择题

  1. 32 位 int 类型的存储范围是( )
    A. -2147483647 ~ +2147483647
    B. -2147483647 ~ +2147483648
    C. -2147483648 ~ +2147483647
    D. -2147483648 ~ +2147483648

答:C
int是32位有符号整型,
当机器数为0111 1111 1111 1111 1111 1111 1111 1111时,表示的数值最大,为 2 31 − 1 2^{31}-1 2311
当机器数为1000 0000 0000 0000 0000 0000 0000 0000时,表示的数值最小,为 − 2 31 -2^{31} 231
因此int可以表示的数值范围为 − 2 31 ∼ 2 31 − 1 -2^{31}\sim 2^{31}-1 2312311,算出来的结果是 − 2147483648 ∼ 2147483647 -2147483648\sim 2147483647 21474836482147483647,选C。

  1. 计算 ( 1 4 8 − 101 0 2 ) ∗ D 16 − 110 1 2 (14_8 − 1010_2)∗D_{16} − 1101_2 (14810102)D1611012的结果,并选择答案的十进制值:( )
    A.13
    B.14
    C.15
    D.16

答:A
将数字都转为二进制。每位8进制数字转为3位二进制数字,每位16进制数字转为4位二进制数字。
1 4 8 = 110 0 2 14_8=1100_2 148=11002 D 16 = 110 1 2 D_{16}=1101_2 D16=11012
所以原式为 ( 1100 − 1010 ) ∗ 1101 − 1101 = ( 1100 − 1010 − 1 ) ∗ 1101 = ( 10 − 1 ) ∗ 1101 = 1101 (1100-1010)*1101-1101=(1100-1010-1)*1101=(10-1)*1101=1101 (11001010)11011101=(110010101)1101=(101)1101=1101
110 1 2 = 2 3 + 2 2 + 2 0 = 8 + 4 + 1 = 13 1101_2=2^3+2^2+2^0=8+4+1=13 11012=23+22+20=8+4+1=13,选A。

  1. 某公司有 10 名员工,分为 3 个部门:A 部门有 4 名员工,B 部门有 3 名员工、C 部门有 3 名员工。现需要从这 10 名员工中选出 4 名组成一个工作组,且每个部门至少要有 1 人。问有多少种选择方式?( )
    A.120
    B.126
    C.132
    D.238

答:B
先分类,再分步。
A部门出2人,B部门出1人,C部门出1人,情况数为: C ( 4 , 2 ) C ( 3 , 1 ) C ( 3 , 1 ) = 6 ∗ 3 ∗ 3 = 54 C(4,2)C(3,1)C(3,1)=6*3*3=54 C(4,2)C(3,1)C(3,1)=633=54
A部门出1人,B部门出2人,C部门出1人,情况数为: C ( 4 , 1 ) C ( 3 , 2 ) C ( 3 , 1 ) = 4 ∗ 3 ∗ 3 = 36 C(4,1)C(3,2)C(3,1)=4*3*3=36 C(4,1)C(3,2)C(3,1)=433=36
A部门出1人,B部门出1人,C部门出2人,情况数为: C ( 4 , 1 ) C ( 3 , 1 ) C ( 3 , 2 ) = 4 ∗ 3 ∗ 3 = 36 C(4,1)C(3,1)C(3,2)=4*3*3=36 C(4,1)C(3,1)C(3,2)=433=36
共有 54 + 36 + 36 = 126 54+36+36=126 54+36+36=126种情况

  1. 以下哪个序列对应数组 0 至 8 的 4 位二进制格雷码(Gray code)?
    A.0000,0001,0011,0010,0110,0111,0101,1000
    B.0000,0001,0011,0010,0110,0111,0100,0101
    C.0000,0001,0011,0010,0100,0101,0111,0110
    D.0000,0001,0011,0010,0110,0111,0101,0100

答:D
格雷码的任意两个相邻的数码只有一位二进制数不同,根据这一特性,使用排除法可以得到选项D。
生成格雷码的方法如下:

  1. 1位格雷码有0与1
  2. (n+1)位格雷码中的前 2 n 2^n 2n个码字等于n位格雷码的码字,按顺序书写,加前缀0
  3. (n+1)位格雷码中的后 2 n 2^n 2n个码字等于n位格雷码的码字,按逆序书写,加前缀1
格雷码位数格雷码
10, 1
200, 01, 11, 10
3000, 001, 011, 010, 110, 111, 101, 100
40000, 0001, 0011, 0010, 0110, 0111, 0101, 0100, 1100, 1101, 1111, 1110, 1010, 1011, 1001, 1000
  1. 记 1KB 为 1024 字节(byte),1MB 为 1024KB,那么 1MB 是多少二进制位(bit)?
    A.1000000
    B.1048576
    C.8000000
    D.8388608

答:D
1字节占用8二进制位,也就是 1 B = 8 b 1B=8b 1B=8b 1 M B = 1024 K B = 1024 ∗ 1024 B = 8 ∗ 1024 ∗ 1024 b = 8388608 b 1MB=1024KB=1024*1024B=8*1024*1024b=8388608b 1MB=1024KB=10241024B=810241024b=8388608b
如想偷懒,可以只算结果的个位数字,也就是 8 ∗ 1024 ∗ 1024 % 10 = 8 ∗ ( 1024 % 10 ) 2 % 10 = 8 ∗ ( 4 2 % 10 ) = 8 ∗ 6 % 10 = 8 8*1024*1024\%10=8*(1024\%10)^2\%10=8*(4^2\%10)=8*6\%10=8 810241024%10=8(1024%10)2%10=8(42%10)=86%10=8
因此结果个位为8,选D。

  1. 以下哪个不是 C++中的基本数据类型?
    A. int
    B. float
    C. struct
    D. char

答:C
struct 不是基本数据类型,struct定义出的结构体(或者叫类)是复合数据类型。其余的int, float, char都是C++的基本数据类型。

  1. 以下哪个不是 C++中的循环语句?
    A. for
    B. while
    C. do-while
    D. repeat-untill

答:D
C++中有for、while和do…while循环。
Repeat-untill 是 Pascal、lua 等语言中的直到循环语句,C++并不支持。

  1. 在 C/C++中,(char)(‘a’+13)与下面的哪一个值相等( )
    A. ’m’
    B. ‘n’
    C. ‘z’
    D. ‘3’

答:B
第1个字母’a’的ASCII码为97,也就是’a’+0
第2个字母’b’的ASCII码为98,也就是’a’+1

第i个字母的ASCII码为’a’+i-1
‘a’+13为第14个字母的ASCII码,第14个字母为’n’,选B。

  1. 假设有序表中有 1000 个元素,则用二分法查找元素 x 最多需要比较( )次
    A.25
    B.10
    C.7
    D.1

答:B
n个元素的有序序列进行二分查找的比较次数为 ⌊ l o g 2 n ⌋ + 1 \lfloor log_2n \rfloor +1 log2n+1二分查找最大比较次数证明
本题中n=1000,代入公式得: ⌊ log ⁡ 2 1000 ⌋ + 1 \lfloor \log_21000 \rfloor +1 log21000+1
已知 2 9 = 512 2^9=512 29=512, 2 10 = 1024 2^{10}=1024 210=1024,所以 2 9 < 1000 < 2 10 2^9<1000<2^{10} 29<1000<210
不等式取以2为底的对数,得: 9 < log ⁡ 2 1000 < 10 9<\log_21000<10 9<log21000<10
所以 ⌊ log ⁡ 2 1000 ⌋ = 9 \lfloor \log_21000 \rfloor=9 log21000=9
所以 ⌊ log ⁡ 2 1000 ⌋ + 1 = 10 \lfloor \log_21000 \rfloor +1=10 log21000+1=10,选B

  1. 下面哪一个不是操作系统名字( )
    A. Notepad
    B. Linux
    C. Windows
    D. macOS

答:A
Notepad是Windows自带的记事本程序,是应用程序。
Linux是开源的类Unix操作系统
Windows是微软开发的操作系统
maxOS是苹果开发的类Unix操作系统

  1. 在无向图中,所有顶点的度数之和等于( )
    A. 图的边数
    B. 图的边数的两倍
    C. 图的定点数
    D. 图的定点数的两倍

答:B
图中一条边贡献两个度,因此所有顶点度数之和等于边数的两倍

  1. 已知二叉树的前序遍历为[A,B,D,E,C,F,G],中序遍历为[D,B,E,A,F,C,G],求二叉树的后序遍历
    的结果是( )
    A. [D,E,B,F,G,C,A]
    B. [D,E,B,F,G,A,C]
    C. [D,B,E,F,G,C,A]
    D. [D,E,B,F,G,A,C]

答:A
已知前序中序遍历序列建树,算法见ybt 1339:【例3-4】求后序遍历
建树为

A
B
D
C
F
E
G

其后序遍历为DEBFGCA,选A。

  1. 给定一个空栈,支持入栈和出栈操作。若入栈操作的元素依次是 1 2 3 4 5 6,其中 1 最先入栈,6 最后入栈,下面哪种出栈顺序是不可能的( )
    A.6 5 4 3 2 1
    B.1 6 5 4 3 2
    C.2 4 6 5 3 1
    D.1 3 5 2 4 6

答:D
入栈顺序是1,2,3,4,5,6,
如果1 2 3 4 5 6都先按顺序入栈,而后不断出栈直到栈空,出栈顺序就是6 5 4 3 2 1,A选项是可行的。
这类问题的思考方式为:如果x出栈,那么在x前入栈的元素除了已出栈的元素都在栈内。
对于B选项,1 6出栈后,栈内从栈底到栈顶分别是2 3 4 5,依次出栈得到5 4 3 2,B选项是可行的。
对于C选项,1入栈,2入栈并出栈,3入栈,4入栈并出栈,5入栈,6入栈并出栈,此时栈内从栈底到栈顶是1 3 5,依次出栈得到5 3 1,是可行的。
对于D选项,1入栈后出栈,2入栈,3入栈后出栈,4入栈,5入栈后出栈,此时栈内从栈底到栈顶是2 4,栈顶是4,2不可能先于4出栈,所以D选项是不可行的。

  1. 有 5 个男生和 3 个女生站成一排,规定 3 个女生必须相邻,问有多少种不同的排列方式?
    A. 4320 种
    B. 5040 种
    C. 3600 种
    D. 2880 种

答:A
第一步,将三个女生站在一起作为一个整体(捆绑法),该整体的情况数为三个女生的全排列,为 P ( 3 , 3 ) P(3,3) P(3,3)
而后第二步5个男生与女生整体一共6个元素,进行全排列,方案数为 P ( 6 , 6 ) P(6,6) P(6,6)
总排列方案数为 P ( 3 , 3 ) ∗ P ( 6 , 6 ) = 3 ∗ 2 ∗ 1 ∗ 6 ∗ 5 ∗ 4 ∗ 3 ∗ 2 ∗ 1 = 4320 P(3,3)*P(6,6)=3*2*1*6*5*4*3*2*1=4320 P(3,3)P(6,6)=321654321=4320,选A。

  1. 编译器的主要作用是什么( )?
    A. 直接执行源代码
    B. 将源代码转换为机器代码
    C. 进行代码调试
    D. 管理程序运行时的内存

答:B
源代码不能直接执行,A错误。
进行代码调试的工具是调试器,比如GDB。
程序内可以通过代码管理程序运行时的内存,操作系统也可以管理各个进程的内存使用。
编译器的作用是对于编译型语言可以将源代码(比如C++代码)编译成为机器可以直接运行的机器代码,也就是CPU指令,选B。

二、阅读程序

阅读程序(1)
阅读程序(2)
阅读程序(3)

三、完善程序

完善程序(1)
完善程序(2)

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值