1841: CSP-J2024初赛模拟(难度高)

文件提交:无需freopen 内存限制:128 MB 时间限制:1.000 S
评测方式:普通裁判 命题人:
提交:1 解决:0

题目描述

2024 QISI非专业级别收容能力认证第一轮

(SCP-J1)入门级C++语言试题

认证时间:2024812 09:30~11:30

考生注意事项:

●  试题纸共有11页,满分100分。请在OJ作答,写在试题纸上的一律无效。

●  不得使用任何电子设备(如计算器、手机、电子词典等)或查阅任何书籍资料。

一、单项选择题(共15题,每题2分,共计30分;每题有且仅有一个正确选项)

1. C++是一种面向对象的程序设计语言。在C++中,下面哪个关键字用于声明一个类,其缺省继承方式为private继承?( 

A.  union

B.  struct

C.  class

D.  enum

 

2. 下述代码实现的数据结构是(  )。

int data[100], f = 1, r; void insert(int value) { data[++r] = value;

} void pop() { f++;

}

A.  链表

B. 

C.  队列

D.  平衡树

 

3. C++语言中,以0b开头的数为(  )进制数。

A.  二进制

B.  八进制

C.  十进制

D.  十六进制

 

4. 根结点的高度为1,高度为5的完全二叉树至少有(  )个结点。

A.  15

B.  16

C.  31

D.  32


5. 右图所示的二叉树,其后序遍历的结果是什么?( 

A.  acedgbf

B.  fbacdge

C.  edgcabf

D.  egdcfba



6. 考虑右图所示的数字电路,有关逻辑门的含义已在图中标出。高电平表示true,低电平表示false。当x,y,z的输入依次为低电平、高电平、高电平时,输出为(  )。

A.  高电平

B.  低电平

C.  电路故障

D.  高阻


7. 十进制数10.375转换为八进制数的结果为(  )。

A.  10.5

B.  10.3

C.  12.5

D.  12.3

 

  8. 假设有一组字符{g,h,i,j,k,l},它们对应的频率分别为8%,14%,17%,20%,23%,18%

请问以下哪个选项是字符g,h,i,j,k,l分别对应的一组哈夫曼编码?( 

A.  g: 1100, h: 1101, i: 111, l: 10, k: 00, j: 01

B.  g: 0000, h: 001, i: 010, l: 011, k: 10, j: 11

C.  g: 111, h: 110, i: 101, l: 100, k: 01, j: 00

D.  g: 110, h: 111, i: 101, l: 100, k: 0, j: 01


9.中缀表达式((6 – 3) * 2 + 7) / (5 ^ (3 * 4 + 2))对应的后缀表达式为(  )。

A.  / + * - 6 3 2 7 ^ 5 + * 3 4 2

B.  6 3 2 - * 7 + 5 3 4 * 2 + ^ /

C.  6 3 – 2 * 7 + 5 3 4 * 2 + ^ /

D.  6 3 – 2 * 7 + 3 4 * 2 + 5 ^ /


10. 3个相同的红球和3个相同的黑球装入三个不同的袋中,每袋均装2个球,则不同的装法总数为(  )。

A.  7

B.  8

C.  9

D.  10


11. 287个整数中随机取2个不同的数,这两个数互质的概率为(  )。

A. 1/6

  B. 1/3

  C. 1/2

  D. 2/3

 

12. 以下哪一种算法典型地使用了分治法的思想来解决问题?( 

A.  线性搜索

B.  快速排序

C.  冒泡排序

D.  插入排序

 

13. 奇偶校验编码是常见的校验编码方式。对于二进制编码AnAn-1…A2A1,奇偶校验编码在编码的最后增加一位校验位 G,并将原编码与校验位作为整体发送。校验位分为奇校验位与偶校验位,奇校验位保证 AnxorAn-1xor…xorA2xorA1xorG=1,偶校验位保证 AnxorAn1xor…xorA2xorA1xorG=0。下列编码与校验位对应正确的是(  )。

A.  编码11100111 奇校验位0

B.  编码01100010 偶校验位0

C.  编码00010010 奇校验位1

D.  编码11100010 偶校验位1

 

14.  下列关于NOI系列活动的有关说法,错误的是(  )。 

A. NOI考试对C++语言的使用没有限制。

B.  选手不可以携带草稿纸、手机、U盘等进入考场。

C.  主办单位CCF的全称为中国计算机学会。

  D. 在CSP第一轮考试中舞弊,可能会被给予取消考试资格、禁赛等处罚。



15.  考虑右图所示的无向图,度最大的结点为(  )号结点。

A.  3

B.  4

C.  5

D.  6

二、阅读程序(程序输入不超过数组或字符串定义的范围;判断题正确填T,错误填F;除特殊说明外,判断题1.5分,选择题3分,共计40分)


 

1

#include <bits/stdc++.h>

using namespace std;

int x, y;

unsigned int n;

int main() {

cin >> n >> x >> y;

unsigned int mask = 0xff;

int x8 = x << 3;

int y8 = y << 3;

10 unsigned int nx = (n >> x8) & mask, ny = (n >> y8) & mask;

11 n &= (~(mask << x8));

12 n &= (~(mask << y8));

13 n |= (nx << y8);

14 n |= (ny << x8);

15 cout << "0x";

16 cout << std::hex << n << endl;

17 return 0; 18 }  

假设输入的n32位无符号整数范围内的整数,x,y是不超过3的自然数,完成下面的判断题和单选题。

⚫   判断题

16.  代码中mask变量的值转化为二进制的低16位结果是0000 0000 1111 1111。( 

17.  当输入x=0的时候,nx表示n中最低八位对应的字节的数据。( 

18.  去掉程序第11行至第12行中(~(mask << x8))(~(mask << y8))两处中的最内层括号不会改变程序的结果。( 

 

⚫   单选题

19. 当输入为15078 0 1”时,变量nx,ny的值分别为多少?( 

(提示:十进制数15078与十六进制数3AE6相同)

A. 0xE6, 0x3A B. 0x6, 0xE0   C. 0x6, 0xE D. 0x6, 0xA

20.当输入为23270 0 1”时,输出为(  )。

(提示:十进制数23270与十六进制数5AE6相同) 

A. 0x5A6E   B. 0x5E6A    C. 0xA56E   D.0xE65A 

21. 以下哪一个变量的类型修改可能影响程序的输出?( 

A.  x,y修改为unsigned int类型。

B.  x8,y8修改为short类型。

C.  mask修改为int类型。

D.  nx,ny修改为unsigned long long类型。

 

2

#include <bits/stdc++.h>

using namespace std;

3

4 int n, k;

5  

int func(vector <int> &nums) {

int ret = 0;

for(int i = n; i > k; i--) {

if(nums[i] > nums[i - k]) {

10     swap(nums[i], nums[i - k]);

11     ret++;

12         }

13     }

14 return ret;

15 }

16  

17 int main() {


18 cin >> n >> k;

19 vector <int> a(n + 1, 0);

20 for(int i = 1; i <= n; i++)

21 cin >> a[i];

22 int counter = 0, previous = -1; while(counter != previous){ previous = counter; counter += func(a);

}

27 for(int i = 1; i <= n; i++)

28 cout << a[i] << ",";

29 cout << endl << counter << endl;

30 return 0;

31 }

假设输入的n,k是不超过100000的正整数,输入的a[i]是不超过109的整数,k小于等于 n,完成下面的判断题和单选题:

 

⚫ 判断题

22.  当输入的k1,程序将a从小到大排序。( 

23.  在题目限制的输入规模下,counter可能会溢出。( 

24.1分)当输入为8 1 1 9 2 3 4 6 8 7”,输出共有18个可见字符。( 

单选题

25. 当输入的k为1,该程序的排序方法最接近(  )。

A. 冒泡排序  B. 选择排序   C. 计数排序  D. 插入排序

26. 该程序的时间复杂度为(  )。

A. 𝑂(𝑛+𝑘2)  B. 𝑂(𝑛2)    C. 𝑂(𝑛𝑘)   D. 𝑂( )

  27. 当输入为8 3 1 5 2 6 3 7 4 8”,输出的第一行第三个数字为(  )。

  A. 2    B. 6     C. 7      D. 8

 

3

#include <iostream>

#include <vector>

#include <queue>

using namespace std;

const int MAXN = 200001;


int main() {

int n, m, l, r, w;

cin >> n >> m;

vector <int> dist(MAXN, -1);

10 vector <bool> vis(MAXN, false);

11 vector <vector <pair<int, int> > > go(MAXN);

12 for(int i = 1; i <= m; i++) {

13 cin >> l >> r >> w;

14 go[l].push_back(make_pair(r + 1, w));

15 go[r + 1].push_back(make_pair(l, -w));

16 }

17 queue <int> q;

18 dist[1] = 0, vis[1] = true;

19 q.push(1);

20 while(!q.empty()) {

21 int x = q.front(); q.pop();

22 for(auto i : go[x]) {

23 if(!vis[i.first]) {

24 vis[i.first] = true;

25 dist[i.first] = dist[x] + i.second;

26 q.push(i.first);

27 }

28 }

29 }

30 if(dist[n + 1] == -1) cout << "sorry" << endl;

31 else cout << dist[n + 1] << endl;

32 return 0;

33 }

假设输入的n,m是不超过200000的正整数,程序第13行每次输入的l,r保证l<=r,完成下面的判断题和单选题:

 

⚫ 判断题

28.  交换程序的第14行与第15行,不影响程序运行的结果。( 

29.  输入的r的最大值为n时,程序可以正常运行。( 

30.  在程序的第17行至第29行,相同的数可能重复进入队列。( 

⚫ 选择题

31.  当输入的l最小值为x,输入的r的最大值为y,最多有(  )个元素进入过队列。

A. 1    B. y – x    C. y – x + 1    D. y – x + 2 

32.  当输入的n为偶数,且r=l+1时,m至少为(  )时输出不为sorry

A. n / 2   B. n / 2 + 1   C. n / 2 - 1    D. n

 33. 当输入为5 3 1 3 4 3 4 2 4 5 3”时,输出为(  )。

A. 4    B. 5     C. 6      D. 7

 

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

1)(优美的进制)问题:给出整数nk进制是优美的,当且仅当nk进制下至少有两位,且每一位的数值都不同。求对于给定的n,有哪些进制是优美的,不存在则输出-1

试补全程序。

1 #include <bits/stdc++.h> 2 using namespace std;

const int MAXN = 100000;

int n;

int vis[MAXN], a[MAXN];

vector<int> ans;

int check(int k) {

int x = n, top = 0;

for (int i = 0; i <= k; i++) vis[i] = 0;

10 while () {

11 a[++top] = ;

12 x = ;

13 }

14 if (top < 2)

15 return 0;

16 for (int i = 1; i <= top; i++) {

17 if ()

18 return 0;

19 vis[a[i]] = 1;

20 }

21 return 1;

22 }

23 int main() {

24 cin >> n;

25 for (int i = ; i <= n; i++) {

26 if (check(i))

27 ans.push_back(i);

28 }

29 if (ans.empty()) {

30 cout << -1;

31 }

32 for (int i = 0; i < ans.size(); i++)

33 cout << ans[i] << " ";

34 return 0; 35 }

 

34. ①处应填( 

A. x > 0    B. x > 1 

 

C. x / k > 0   

D. x / k > 1

35. 处应填( 

A. x / k    

 

 

 

 

B. x % k

C. (x - 1) / k + 1 

36. 处应填( 

 

 

 

 

D. (x – 1) % k + 1

A. x / k    

 

 

 

 

B. x % k

C. (x - 1) / k + 1  37. 处应填(  )。

 

 

 

 

D. (x – 1) % k + 1

A. vis[i] == 1   

 

 

 

 

B. vis[a[i]] == 0

C. vis[i] == 0   38. 处应填(  )。

 

 

 

 

D. vis[a[i]] == 1

A. 1     B. n - 1 

 

C. 2     

D. 0

 

2)(好运的日期)一个日期可以用xyz日来表示。我们称一个日期是好运的,当且仅当xy(w-z+1)为质数,其中wxy月的总天数。输入x,y,z,判断其对应的日期是否好运。保证x是不超过2024的正整数,y是不超过12的正整数,x,y,z可以构成一个合法的日期。

试补全线性筛法算法,空间限制512MiB

#include <bits/stdc++.h>

using namespace std;

3  

const int MAXW = ;

const int days[13] = {0, 31, 0, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

int prime[MAXW], cnt;

bool not_prime[MAXW];

8  

void linear_prime(int n) {

10 --n;

11 not_prime[0] = not_prime[1] = true; 

12 for(int i = 2; i <= n; i++) {  

13 if(not_prime[i] == false)

14 prime[++cnt]=i;

15 for(int j = 1; ; j++) {

16 not_prime[i * prime[j]] = 1;

17 if(i % prime[j] == 0)

18 ③;

19 }

20 }

21 }

22 bool check(int n) {

23 return ;

24 }

25  

26 int main() {

27 linear_prime(MAXW);

28 int x, y, z, w;

29 cin >> x >> y >> z;

30 if(y == )

31 w = check(x) ? 29 : 28;

32 else

33 w = days[y];

34 if(not_prime[x * y * (w – z + 1)])

35 cout << "unlucky" << endl;

36 else

37 cout << "lucky" << endl;

38 return 0;

39 }

 

39.  ①处可以填( 

A. 753005 

 

 

 

 

 

 

 

B. 10000000000

C. 725041 

 

 

 

 

 

 

 

D. 2024

40.  ②处应填( 

A.  j <= cnt

B.  i * prime[j] <= n

C.  (j <= cnt) && (i * prime[j] <= n)

D.  (i <= cnt) && (prime[i] * prime[j] <= n)

41.  ③处应填( 

A. not_prime[i] = true 

 

 

 

B. return

C. continue    

 

 

 

D. break

42.  ④处应填(  )。

A.  n % 4 == 0

B.  (n % 400 == 0 || (n % 4== 0 && n % 100 != 0))

C.  (n % 4 == 0 && n % 100 != 0)

D.  (n % 100 == 0 || (n % 4 == 0 && n % 100 != 0))

43. ⑤处应填(  )。

A. 1     B. 7    C. 8      D. 2






来源/分类