夜雨聆风学习资料网

ARTICLE · 994812

CSP-J 2024 第一轮真题及解析

CSP-J 2024 第一轮真题及解析

点击名片 关注我们

进群领取CSP复习资料。

9月13日,上海交大教练直播课,13:00-15:00,C++信奥零基础新班开课。

1

单项选择

2

阅读程序

阅读程序(一)

#include<iostream>usingnamespacestd;boolisPrime(int n){if (n <= 1) {returnfalse;   }for (int i = 2; i * i <= n; i++) {if (n % i == 0) {returnfalse;     }   }returntrue;}intcountPrimes(int n){int count = 0;for (int i = 2; i <= n; i++) {if (isPrime(i)) {           count++;       }    }return count;}intsumPrimes(int n){int sum = 0;for (int i = 2; i <= n; i++) {if (isPrime(i)) {             sum += i;         }    }return sum;}intmain(){int x;cin >> x;cout << countPrimes(x) << " " << sumPrimes(x) << endl;return0;}

假设输入的所有数都为不超过 1000 的正整数,完成下面的判断题和单选题:

【题目分析】

判素数逻辑:试除到 (条件 i * i <= n)。

countPrimes(n):统计  的素数个数。

sumPrimes(n):求  的素数和。

判断题

  1. 当输入为“10”时,程序的第一个输出为“4”,第二个输出为“17”。
  • 正确
  • 错误

【答案】正确

【解析】

  1. 若将 isPrime(i) 函数种的条件改为 i<=n/2,输入“20”时,countPrimes(20) 的输出将变为“6”。
  • 正确
  • 错误

【答案】错误

【解析】

修改后循环范围(试除到 )虽然冗余,但不会改变正确性。

20 以内素数:2, 3, 5, 7, 11, 13, 17, 19 共 8 个,不会变成 6。

  1. sumPrimes 函数计算的是从 2 到 n 之间的所有素数之和。
  • 正确
  • 错误

【答案】正确

【解析】

符合题意。

单选题

  1. 当输入为“50”时,sumPrimes(50) 的输出为(   )。

A. 1060

B. 328

C. 381

D. 275

【答案】B

【解析】

50 以内素数:2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47,求和 328。

  1. 如果将 for(int i=2;i*i<=n;i++) 改为 for(int i=2;i<=n;i++),输入“10”时,程序的输出(   )。

A. 将不能正确计算10以内素数个数及其和

B. 仍然输出“4”和“17”

C. 输出“3”和10

D. 输出结果不变,但运行时间更短

【答案】A

【解析】

修改后,当判断一个素数 n(如 2, 3, 5, 7)时,循环会走到 i == n,此时 n % n == 0,函数一直返回 false

阅读程序(二)

#include<iostream>#include<vector>usingnamespacestd;intcompute(vector<int> &cost){int n = cost.size();vector<intdp(n + 10);   dp[1] = cost[0];for (int i = 2; i <= n; i++) {       dp[i] = min(dp[i - 1], dp[i - 2]) + cost[i - 1];   }return min(dp[n], dp[n - 1]);}intmain(){int n;cin >> n;vector<intcost(n);for (int i = 0; i < n; i++) {cin >> cost[i];   }cout << compute(cost) << endl;return0;}

判断题

  1. 当输入的cost数组为{10,15,20}时,程序的输出为15。
  • 正确
  • 错误

【答案】正确

【解析】

计算:

  • dp[0]=0
  • dp[1]=10
  • i=2dp[2]=min(10,0)+15=15
  • i=3dp[3]=min(15,10)+20=30答案:min(dp[3],dp[2])=min(30,15)=15。成立。

22.如果将dp[i-1]改为dp[i-3],程序可能会产生编译错误。

  • 正确
  • 错误

【答案】错误

【解析】

语法合法,依旧能编译;但运行时当 i=2i=3 就会访问 dp[-1] 或 dp[-2](越界,未定义行为),不是“编译错误”。

  1. (2分)程序总是输出cost数组种的最小的元素。
  • 正确
  • 错误

【答案】错误

【解析】

例:cost = {10,15,20},最小元素是 10,输出却是 15(组合路径的最优总费用,不等于单个最小值)。

单选题

  1. 当输入的 cost 数组为{1,100,1,1,1,100,1,1,100,1}时,程序的输出为(   )。

A. 6

B. 7

C. 8

D. 9

【答案】A

【解析】

i
含义
推导过程
dp[i]
0
起点
给定
0
1
第1级
=cost[0]
1
2
第2级
min(1,0)+100
101
3
第3级
min(101,1)+1
2
4
第4级
min(2,101)+1
3
5
第5级
min(3,2)+1
3
6
第6级
min(3,3)+100
103
7
第7级
min(103,3)+1
4
8
第8级
min(4,103)+1
5
9
第9级
min(5,4)+100
104
10
第10级
min(104,5)+1
6

答案:min(dp[10], dp[9]) = min(6,104)=6

  1. (4分)如果输入的 cost 数组为{10,15,30,5,5,10,20},程序的输出为(   )。

A. 25

B. 30

C. 35

D. 40

【答案】B

【解析】

i
推导过程
dp[i]
0
初值
0
1
=10
10
2
min(10,0)+15
15
3
min(15,10)+30
40
4
min(40,15)+5
20
5
min(20,40)+5
25
6
min(25,20)+10
30
7
min(30,25)+20
45

答案:min(dp[7], dp[6]) = min(45,30)=30

  1. 若将代码中的 min(dp[i-1],dp[i-2])+cost[i-1] 修改为 dp[i-1]+cost[i-2],输入 cost 数组为 {5,10,15} 时,程序的输出为(   )。

A. 10

B. 15

C. 20

D. 25

【答案】A

【解析】

  • dp[0]=0
  • dp[1]=5
  • i=2dp[2]=dp[1]+cost[0]=5+5=10
  • i=3dp[3]=dp[2]+cost[1]=10+10=20返回 min(dp[3], dp[2]) = min(20,10)=10

阅读程序(三)

#include<iostream>#include<cmath>usingnamespacestd;intcustomFunction(int a, int b){if (b == 0) {return a;   }return a + customFunction(a, b - 1);}intmain(){int x, y;cin >> x >> y;int result = customFunction(x, y);cout << pow(result, 2) << endl;return0;}

【程序分析】

判断题

  1. 当输入为“2 3”时,customFunction(2,3)的返回值为“64”。
  • 正确
  • 错误

【答案】错误

【解析】

customFunction(2,3)=2*(3+1)=8;打印的是 。题干把函数返回值最终输出混淆,所以错误。

  1. 当 b 为负数时,customFunction(a,b)理论上会陷入无限递归。
  • 正确
  • 错误

【答案】正确

【解析】

若 b<0,每次递归调用 b-1 继续变小,永远不会等于 0,导致栈溢出(无限递归)。

  1. 当 b 的值越大,程序的运行时间越长。
  • 正确
  • 错误

【答案】正确

【解析】

递归深度(调用次数)为 b 次(加上基例),时间复杂度 O(b),空间复杂度(调用栈)同为 O(b)。因此随 b 增长而线性变慢。

单选题

  1. 当输入为“5 4”时,customFunction(5,4) 的返回值为(   )。

A. 5

B. 25

C. 250

D. 625

【答案】B

【解析】

  1. 如果输入x = 3 和 y = 3,则程序的最终输出为(   )。

A. 27

B. 81

C. 144

D. 256

【答案】C

【解析】

  1. (4分)若将customFunction函数改为“return a + customFunction(a-1,b-1);并输入“3 3”,则程序的最终输出为(   )。

A. 9

B. 16

C. 25

D. 36

【答案】D

【解析】

f(3,3) = 3 + f(2,2)

f(2,2) = 2 + f(1,1)

f(1,1) = 1 + f(0,0)

f(0,0) = 0            // 因 b==0 返回 a(=0)

合计 = 3+2+1+0 = 6

输出 =  = 36

4

完善程序

相关推荐

1

LMCC认证,人工智能基础概念

2

LMCC认证,了解大模型发展史

3

LMCC认证,transformer架构

4

信奥数学启蒙,数列

喜欢就“分享”一下吧~

相关学习资料

返回首页浏览学习资料