#C1212. 2024CSPJ初赛模拟题(三)

2024CSPJ初赛模拟题(三)

一、单项选择(共 15 题,每题 2 分,共计 30 分)

1、信息论的奠基者是( )

{{ select(1) }}

  • 冯.诺伊曼
  • 艾伦 ·麦席森 · 图灵
  • 克劳德 ·艾尔伍德 ·香农
  • 姚期智

2、下列不同的进制数中,与其他三项不同的是( )

{{ select(2) }}

  • (1000011)2
  • (67)10
  • (103)8
  • (45)16

3、采用八位二进补码表示十进制整数-128,则其表示形式为? ()

{{ select(3) }}

  • 00000000
  • 00000001
  • 10000000
  • 11111111

4、表 达 式 a*b+c*d 的后缀形式是()。

{{ select(4) }}

  • ab*cd*+
  • abc+*d*
  • a*bc*d+
  • b+c*a*d

5、基于比较的排序算法最优的时间复杂度为()。

{{ select(5) }}

  • O(n)
  • O(1)
  • Onlog2nO(nlog_2n)
  • O(n2)O​(n^2 )

6、已知一个程序的时间复杂度满足 T(1)=1,T(n)=2T(n/2)+n,问该程序的时间复 杂度为()。 {{ select(6) }}

  • O(n)
  • O(2n)
  • Onlog2nO(nlog_2n)
  • O(n2)O​(n^2 )

7、分辨率为 1920×1080、64 位色的位图 , 存储图像信息所需的空间约为( ) {{ select(7) }}

  • 8MB
  • 16MB
  • 32MB
  • 64MB

8、以下二叉树的中序遍历为 ()

image

{{ select(8) }}

  • ABCDEFG
  • CBDAEFG
  • CDBGFEA
  • CBDEFGA

9、对于入栈顺序为 a,b,c,d,e,f,g 的序列,出栈顺序为 d,f,e,g,c,b,a,则栈 的深度至少为()

{{ select(9) }}

  • 4
  • 5
  • 6
  • 7

10、 现要在双向链表中的指针 p 后插入一个由指针 s 指向的结点,下列代码正 确的是( )

{{ select(10) }}

  • p->next=s; s->prev=p;s->next=p->next; p->next->prev=s;
  • s->prev=p;p->next=s; s->next=p->next; p->next->prev=s;
  • s->prev=p; s->next=p->next; p->next->prev=s; p->next=s;
  • s->prev=p; s->next=p->next; p->next=s; p->next->prev=s;

11、1582 年以来公历的置闰规则: 普通闰年:公历年份是 4 的倍数,且不是 100 的倍数的,为闰年(如 2004 年、 2020 年等就是闰年)。 世纪闰年:公历年份是整百数的,必须是 400 的倍数才是闰年(如 1900 年不是 闰年,2000 年是闰年)。已知年份 x>1582,以下哪一个逻辑表达式可以正确判定闰年( )。

{{ select(11) }}

  • x%4==0&&x%100!=0
  • x%4==0|| (x%400==0&&x%100!=0)
  • x%4==0&&(x%100!=0||x%400==0)
  • x%4==0&&x%400==0&&x%100!=0

12、考虑如下递归算法,问调用 solve(24,64)的返回值 ( )

solve(n,m)
    if m==0 return n
    else return solve(m, n%m)

{{ select(12) }}

  • 4
  • 8
  • 12
  • 16

13、有 6 个人排成一排,其中有两个人撞衫了,不能站在相邻的位置,问有多少 种排队方式 ( )

{{ select(13) }}

  • 720
  • 600
  • 480
  • 320

14、数位之和为 10 的四位数有( )种

{{ select(14) }}

  • 218
  • 219
  • 220
  • 240

15、有 5 名同学,每个同学有一个座位,现在每个同学都不想坐在自己的座位上, 问一共有多少种坐法( )

{{ select(15) }}

  • 120
  • 72
  • 60
  • 44

二、阅读程序(除特殊说明外,判断题 1.5 分,选择题 4 分,共计 40 分)

1、 image

保证输入的 n 和 m 为不超过 1,000,000 的正整数

16、 第 7 行,a&1 改成 a%2,程序结果不变( ) {{ select(16) }}

  • 正确
  • 错误

17、 第 6 行,条件改成仅为 a&1,程序结果不变( ) {{ select(17) }}

  • 正确
  • 错误

18、 第 6 行,条件改成仅为 b&1,程序结果不变() {{ select(18) }}

  • 正确
  • 错误

19、 输出结果不可能为 0( ) {{ select(19) }}

  • 正确
  • 错误

20、 该算法的时间复杂度为( ) (3 ’)

{{ select(20) }}

  • O(n)
  • O(logn)
  • O(nlogn)
  • O(n2)O(n^2)

21、 输入 192 80 ,输出结果为( ) (3 ’)

{{ select(21) }}

  • 40
  • 80
  • 16
  • 8

2、 image

输入的 n 为不超过1000000的正整数,接下来 n 个数为 1000000 范围内的正整数。

22、 solve2()实现了选择排序。 ( )

{{ select(22) }}

  • 正确
  • 错误

23、 solve1()函数的时间复杂度为 O(n+V),其中 V 指的是 ai 的最大值。 ( )

{{ select(23) }}

  • 正确
  • 错误

24、 当输入数据为 7 2 3 5 7 1 4 6, solve2 函数内的 cnt 最终为 9。 ( )

{{ select(24) }}

  • 正确
  • 错误

25、若将第 24 行的双斜杠删除,不会影响输出结果。 ( )

{{ select(25) }}

  • 正确
  • 错误

26、下列哪组数据,solve1 和 solve2 的输出结果不同 ( )。

{{ select(26) }}

  • 5 1 2 3 4 5
  • 6 111 222 3 4 6 7
  • 7 123 456 432 243 213 342 343
  • 8 111 222 333 444 555 666 333 111

27、将第 9 行改为( ),可以使 solve1 和 solve2 的输出保持一致。

{{ select(27) }}

  • while(b[i])
  • while(--b[i])
  • while(b[i]--)
  • if(b[i]>1)

3、 image

输入:第一行两个正整数n,m, 接下来输入 n*m 的字符矩阵,由 F 或 X 组成。 (1<=n,m<=1000)

28、 若删除第 17 行, 程序结果不变。 ( )

{{ select(28) }}

  • 正确
  • 错误

29、 若删除第 19 行, 程序结果不变。 ( )

{{ select(29) }}

  • 正确
  • 错误

30、 若将第 7 行改为 int maxx=-1; 程序结果可能会产生错误。 ( )

{{ select(30) }}

  • 正确
  • 错误

31、单次 ask 函数的时间复杂度是 O(m)。 ( )

{{ select(31) }}

  • 正确
  • 错误

32、 若输入为:

3 4  
FXFX 
FFFX 
XFFX

输出为 ( )。

{{ select(32) }}

  • 3
  • 4
  • 5
  • 7

33、 若输入为:

3 4  
FXFX 
FFFF 
XFFF

maxx 变化了 ( )次。

{{ select(33) }}

  • 3
  • 4
  • 5
  • 6

三、完善程序(单选题,每小题 3 分,共计 30 分)

1、(链表反转)单向链表反转是一道经典算法问题,比如有一个链表是这样的, 1->2->3->4->5,反转后成为 5->4->3->2->1。现给定如下链表节点的定义:

struct LinkNode{
	int value;
	LinkNode* next;
};

非递归实现:
LinkNode* Reverse(LinkNode* header){
	if (header == NULL || header->next == NULL){
		return header; 
	}
	
	LinkNode* pre = header, *cur = header->next;
	pre->next = NULL;  while(cur != NULL) {
		LinkNode* next =      1    ;
		2    = pre;
		pre = cur;  
		cur = next;
	}
	return pre;
}

递归实现:
LinkNode * Reverse(LinkNode * head){
	if (head == NULL || head->next == NULL){
		return head; 
	}
	LinkNode * newhead =     3    ;
	4      = head;
	head->next =     5    ; 
	return newhead;
}

34、上述程序 1 中应该填写()

{{ select(34) }}

  • pre-> next
  • cur-> next
  • header-> next
  • NULL

35、上述程序 2 中应该填写()

{{ select(35) }}

  • pre-> next
  • cur-> next
  • header-> next
  • NULL

36、上述程序 3 中应该填写()

{{ select(36) }}

  • Reverse(head)
  • Reverse(pre)
  • Reverse(cur)
  • Reverse(head->next)

37、上述程序 4 中应该填写()

{{ select(37) }}

  • newhead->next
  • head-> next
  • head-> next->next
  • NULL

38、上述程序 5 中应该填写()

{{ select(38) }}

  • newhead->next
  • head-> next
  • head-> next->next
  • NULL

2、设备检测

有 n 个器件,要用一台检测设备检测。每个送检器件的信息包含送达时间、检测时长和优先 级。优先级有 m 个为等级, 由高到低分别用 0~m-1 的整数表示。每个器件的送达时间各不 相同。已送达的器件按照各优先级通道分别排队,先到达先入队。设备每次检测都从当前各 非空队列中,选取优先级最高的队列的队首器件出队进行检测。(同一时刻出现入队和出队时, 先处理入队。)

输入 n 个器件的信息,输出任务的执行顺序

提示:

bool operator<(const Work a)const{  
   return t<a.t;
}

以上程序功能为默认结构体中的 t 按照从小到大的规则排序。

image image

39、①处应填( )

{{ select(39) }}

  • i<=n
  • cnt
  • i<=n && cnt
  • i<=n || cnt

40、②处应填()

{{ select(40) }}

  • a[i].t>T
  • !cnt
  • !cnt && a[i].t>T
  • !cnt || a[i].t>T

41、③处应填()

{{ select(41) }}

  • link[tail[a[i].rk]]=i;
  • link[i]= tail[a[i].rk];
  • head[tail[a[i].rk]]=i;
  • head[i]= tail[a[i].rk];

42、 ④处应填()

{{ select(42) }}

  • ans[++now]=a[head[j]].id;
  • ans[++now]=i;
  • ans[++now]=head[j];
  • ans[++now]=j;

43、 ⑤处应填()

{{ select(43) }}

  • T = a[head[j]].t;
  • T = T+a[head[j]].len;
  • T = a[tail[j]].t;
  • T = a[tail[j]].t+a[tail[j]].len;