高山 发表于 2026-9-19 21:44:51

【CSP-J 第一轮】2026非专业软件能力认证原卷和答案

本帖最后由 高山 于 2026-9-20 05:21 编辑

【CSP-J第一轮】2026年卷
原卷和答案

序言
本系列旨在帮助鱼油复习和了解CSP-J 第一轮试卷的内容,并协助鱼油开展对第二轮的练习。针对第一轮,现已完成考试,本系列将逐步解析试卷。针对第二轮,我们将逐步讲解洛谷往年真题,鱼油们可以对此开展学习。
对于本系列的所有内容,您可以打开淘专辑进行学习,快速查找您所需要的内容。为了鼓励鱼油们参与题目的思考,您回复本帖,解锁答案时,将获取回帖奖励。同时,针对于较优质的思考,我们还会同时进行评分奖励。
本帖旨在帮您回顾原卷和答案。如您需要详细的解析,请关注本淘专辑系列,我们将通过详细的动画为您逐题讲解。
您可通过「目录」选择试卷和答案部分进行核对。为了方面您记忆,我们已将答案融入试卷中。如您习惯直接展示全文,可点击下方【查看全文】按钮直接阅读帖子,无需根据题型选择。(感谢洛谷提供试卷和答案,题目版权属于CCF,本次提供的内容可能与原卷有所不同,后期逐题解析可能与洛谷答案或CCF标准答案有所不同,这里仅供帮助鱼油快速核对试卷和答题内容)(题目来源于洛谷chen_zhe,本帖进行了排版)选择题部分

题号答案题号答案题号答案
1B6D11A
2D7D12D
3C8C13C
4C9B14A
5B10A15B

1. 下列 C++ 数据类型中,能够精确存储 10的18次方+1 这个整数的是( B )。
A. float B. long long C. double D. int

2. 十六进制数 2F5 转换为八进制数是( D )。
A. 1364 B. 1635 C. 1405 D. 1365

3. 执行下列 C++ 代码,输出是( C )。
int a = 7, b = 3;
std::cout << a / b * b + a % b;A. 9 B. 10 C. 7 D. 6

4. 初始栈空,将 1、2、3、4 依次入栈,允许随时出栈。不可能的出栈序列是( C )。
A. 2,4,3,1 B. 1,2,3,4 C. 3,1,2,4 D. 1,4,3,2

5. 一棵有 100 个结点的完全二叉树,叶子结点个数是( B )。
A. 49 B. 50 C. 64 D. 51

6. 执行下列代码后 s 的值是( D )。
int s = 0;
for (int i = 1; i <= 100; i++)
    if (i % 3 == 0 || i % 5 == 0)
      s += i;A. 3048 B. 2733 C. 2318 D. 2418

7. 上楼梯每步可上 1、2 或 3 级,从地面到第 8 级共有多少种走法( D )。
A. 44 B. 121 C. 149 D. 81

8. 5×5 网格 BFS(上、下、左、右顺序),E 首次入队时已入队格子总数(含 S、E)为( C )。
A. 15 B. 12 C. 14 D. 13

9. 满足 1≤n≤100 且 gcd(n,60)=6 的正整数 n 个数( B )。
A. 8 B. 6 C. 4 D. 5

10. 硬币面值 1、4、6 元无限,凑 9 元最少枚数( A )。
A. 3 B. 4 C. 5 D. 2

11. 执行下列代码,输出是( A )。
int a = {1, 3, 5, 7, 9};
int *p = a + 2;
*(p - 1) = p + p;
p = *(a + 1) - a;
cout << a << "," << a;A. 14,13 B. 8,13 C. 14,7 D. 14,2

12. 1000 个互异升序元素二分查找最坏比较次数( D )。
A. 500 B. 9 C. 11 D. 10

13. 前缀和 S=3i²+i,则 a 的值是( C )。
A. 252 B. 310 C. 58 D. 61

14. 数轴 7 点 1、3、4、7、10、15、20,取整数 P 使距离和最小,最小值( A )。
A. 37 B. 42 C. 40 D. 38

15. 无向图 10 顶点,4 个度 3、其余度 4,边数是( B )。
A. 36 B. 18 C. 17 D. 20




二、阅读程序

答案汇总

题号答案题号答案题号答案
16√22√28×
17×23×29√
18√24×30√
19A25B31B
20C26A32D
21C27C33C



(1)

#include <iostream>
using namespace std;
int main() {
    int n;
    cin >> n;
    int x = 1, y = 1;
    while (n > 0) {
      if (n % 2 == 0) {
            ++x;
      } else {
            ++x;
            ++y;
      }
      n = n / 2;
    }
    cout << x << ' ' << y << endl;
    return 0;
}

(输入 n 为不超过 2^31−1 的非负整数)

判断题
16. 当输入为 3 时,程序输出为 3 3。( √ )
17. 将第 11 行的 ++x; 删除后,程序输出的两个数一定相等。( × )
18. 假设输入为非负整数,则程序输出的第一个数一定不小于第二个数。( √ )

单选题
19. 将第 7 行的 while (n > 0) 改为 while (n >= 0) 后,程序可能出现的问题是( A )。
A. 陷入死循环 B. 输出结果比原来大 C. 输出结果比原来小 D. 输出结果不受影响

20. 当输入为 6 时,输出为( C )。
A. 3 3 B. 4 2 C. 4 3 D. 5 2

21. 若输入 n 依次取遍 0,1,2,…,2^31−1 中的所有整数,则程序输出的第二个数恰好为 2 的次数为( C )。
A. 16 B. 30 C. 31 D. 32


(2)

#include <algorithm>
#include <iostream>
#include <string>
using namespace std;
int a, b, c, carry;
string input_str;
int a_len, b_len;
int main() {
    cin >> input_str;
    a_len = input_str.size();
    for (int i = 0; i < a_len; i++) {
      a = input_str - '0';
    }
    cin >> input_str;
    b_len = input_str.size();
    for (int i = 0; i < b_len; i++) {
      b = input_str - '0';
    }
    carry = 0;
    for (int i = 0; i < max(a_len, b_len) + 1; i++) {
      c = a + b + carry;
      if (c >= 10) {
            carry = 1;
            c -= 10;
      } else {
            carry = 0;
      }
    }
    for (int i = max(a_len, b_len); i >= 0; i--) {
      cout << c;
    }
    cout << endl;
    return 0;
}

(本题输入的两个数均为非负整数,位数不超过 100000,可能包含前导零)

判断题
22. 当输入为 123 456 时,程序输出为 0579。( √ )
23. 假设输入的两个数均不含前导零,则程序输出的结果也一定不会含有前导零。( × )
24. 将第 21 行改为 c = a + b; 后,程序输出的结果一定比原来的结果小。( × )

单选题
25. 当输入为 12345 678 时,输出为( B )。
A. 012923 B. 013023 C. 13023 D. 130230

26. 将第 22 行的 if (c >= 10) 改为 if (c > 10) 后,当输入为 95 15 时,输出为( A )。
A. 01010 B. 110 C. 140 D. 1410

27. 假设输入的两个数均为 n 位正整数(不含前导零),且它们的和小于 10^n,则程序输出的字符串一定满足( C )。
A. 第一个字符一定不为 '0' B. 长度一定为 n C. 长度一定为 n+1,且第一个字符为 '0' D. 长度可能为 n+2


(3)#include <iostream>
using namespace std;
bool check_prime(int x) {
    if (x <= 1) return false;
    for (int i = 2; i * i <= x; i++) {
      if (x % i == 0) return false;
    }
    return true;
}
int n;
void search_result(int x) {
    if (!check_prime(x)) return;
    if (x >= n) {
      cout << x << endl;
      return;
    }
    for (int i = 0; i <= 9; i++) {
      search_result(x * 10 + i);
    }
}
int main() {
    cin >> n;
    for (int i = 1; i <= 9; i++) search_result(i);
    return 0;
}判断题
28. 当输入为 10 时,程序的输出共有 10 行。( × )
29. 若输入的 n 不大于 5,则程序的输出中一定包含 5。( √ )
30. 若输入的 n 大于 10,将第 17 行的 for (int i = 0; i <= 9; i++) 改为 for (int i = 1; i <= 9; i += 2) 后,程序的输出结果一定不变。( √ )

单选题
31. 当输入为 24 时,程序输出的第 3 行为( B )。
A. 23 B. 29 C. 31 D. 239

32. 下列关于该程序输出的说法中,正确的是( D )。
A. 输出的数一定按照从小到大的顺序排列
B. 随着输入 n 的增大,输出的行数一定不会增加
C. 输出的数的个位数字只可能是 3 或 7
D. 输出的每个大于等于 10 的数,十进制下删去它的末位数字后得到的数一定是质数

33. 当输入为 200 时,程序输出的行数为( C )。
A. 12 B. 13 C. 14 D. 15

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

答案汇总

(1)34-38

题号3435363738
答案DBDBC


(2)39-43

题号3940414243
答案BDCAD



(1)进制减半

给定 n 和 m,再给定一个 m乘n 进制下的数 A,其各个数位上的数按照从高位到低位的顺序给出,请你将其转化为 n 进制,并同样按照从高位到低位的顺序输出。

输入的第一行依次为 n、m 和 A 的位数 d,接下来 d 个数 a、a、…、a 从高位到低位描述各个数位上的数。

数据满足 2≤n≤10,2≤m≤10,1≤d≤18,0≤A<2的63次方;对于所有 1≤i≤d,0≤a<m乘n。

以下程序按“逐位除以 n”的方法完成进制转换。


#include <iostream>
constexpr int N = 100005;
long long b;
int main() {
    long long n, m, d;
    std::cin >> n >> m >> d;
    int len = 1;
    for (int i = 0; i < d; i++) {
      long long x;
      std::cin >> x;
      for (int j = len; j >= 1; j--)
            b = /* ① */;
      b = /* ② */;
      len++;
      for (int j = 0; j < len; j++)
            if (b >= n) {
                b += /* ③ */;
                b = /* ④ */;
                if (j + 1 == len) len++;
            }
    }
    while (/* ⑤ */) len--;
    for (int i = len - 1; i >= 0; i--)
      std::cout << b << ' ';
    return 0;
}


34. ①处应填( D )。
A. b * n B. b * m C. b * n D. b * m

35. ②处应填( B )。
A. x * n B. x C. 0 D. m

36. ③处应填(D)。
A. b / m B. b % n C. b % m D. b / n

37. ④处应填( B )。
A. b / m B. b % nC. b % m D. b / n

38. ⑤处应填( C )。
A. len > 0 && b == 0
B. len > 0 && b == 0
C. len > 1 && b == 0
D. len > 1 && b == 0


(2)平衡分割

给定一个长度为 n 的字符串,其中每个字符都是一个十六进制数位。例如,字符串 016A 表示十进制下的四个数 0、1、6、10。

现在请选择 k 个(k 是你选定的数)切分位置 p、p、…、p,其中 1≤k<n,且 1≤p<p<…<p<n。再令 p=0,p=n。

对于每个 0≤i≤k,计算第 p+1 个数到第 p 个数的平均值,记作 b。目标是使 b、b、…、b 中最大值与最小值之差尽可能小,并输出这个最小值。

其中 2≤n≤20。输入字符串中的字符只可能是 0—9 或 A—F。本题假定字符采用 ASCII 编码。输出答案时保留小数点后 6 位。

以下程序通过递归枚举所有可能的连续分段方案。

#include <algorithm>
#include <iomanip>
#include <iostream>
using namespace std;
constexpr int N = 25;
int n, a;
char s;
double ans = 1e100;
int value(char c) { return /* ① */; }
void split(int l, int cnt, double mnb, double mxb) {
    if (l > n) {
      if (cnt == 0) return;
      ans = min(ans, mxb - mnb);
      return;
    }
    int sum = 0;
    for (/* ② */) {
      sum += a;
      double nwb = /* ③ */;
      split(/* ④ */);
    }
}
int main() {
    cin >> n >> s + 1;
    for (int i = 1; i <= n; ++i)
      a = value(s);
    split(/* ⑤ */);
    cout << fixed << setprecision(6) << ans;
}


39. ①处应填( B )。
A. c - (c < '9' ? '0' : 'A' - 10)
B. c - (c < 'A' ? '0' : 'A' - 10)
C. c - (c < 'A' ? 'A' - 10 : '0')
D. c - (c < 'A' ? '0' : 'A' + 10)

40. ②处应填( D )。
A. int r = l + 1; r <= n; ++r
B. int r = l; r < n; ++r
C. int r = l; r <= n; r += 2
D. int r = l; r <= n; ++r

41. ③处应填( C )。
A. sum / (r - l + 1) * 1.0
B. sum * 1.0 / (r - l) + 1
C. sum * 1.0 / (r - l + 1)
D. (sum - a) * 1.0 / (r - l + 1)

42. ④处应填( A )。
A. r + 1, cnt + (r < n), min(mnb, nwb), max(mxb, nwb)
B. r + 1, cnt + (r <= n), min(mnb, nwb), max(mxb, nwb)
C. r + 1, cnt + (r < n), max(mnb, nwb), min(mxb, nwb)
D. r + 1, cnt + (r <= n), max(mnb, nwb), min(mxb, nwb)

43. ⑤处应填( D )。
A. 0, 0, 1e100, -1e100
B. 0, 0, -1e100, 1e100
C. 1, 0, -1e100, 1e100
D. 1, 0, 1e100, -1e100

在后续的系列中,我们将继续对CSP - J 第一轮的题目进行讲解,并为大家准备第二轮的复赛。
如您喜欢,请不要忘记「评分」和「评论」哟~感谢你对鱼C的支持!

在本帖下方发布你的题解或看法,我们将给予除回帖奖励外的额外「荣誉」、「贡献」、「鱼币」哦!


static/image/hrline/line1.png
请不要大范围刷帖或违反《鱼C论坛规则》。请注意,出于鱼C论坛对于评分工具的限制,每日发出的评分有限,因此对您的优质评论不保证及时评分如未收到,请等待一些时间。在本专辑中,标注为【第一轮】的帖子,均在第一轮正式发布成绩、各省划定分数线、CCF公布认证等级后,进行关闭。部分除外。工作人员将根据参与度等情况,对本次回帖奖励的鱼币数、总数和总量进行调整。数量有限,先到先得。对于回帖中奖概率,请以论坛帖子功能上公示的为主,工作人员会进行调整。帖子变更后,工作人员如有说明,将通过【补充】功能进行设置。

高山 发表于 2026-9-19 21:48:16

@zhangjinxuan {:10_316:}

空python 发表于 2026-9-19 23:46:04

厉害呀!

I会成功 发表于 2026-9-20 07:35:29

支持!

yu55800 发表于 2026-9-20 09:30:26

{:5_106:}

菠萝芒果蜜 发表于 2026-9-20 09:55:46

{:5_106:}

犇犇犇 发表于 2026-9-20 22:13:43

{:5_107:}

tater 发表于 2026-9-20 22:18:24

{:5_111:}

lidf1981 发表于 2026-9-21 15:20:09

厉害啊
页: [1]
查看完整版本: 【CSP-J 第一轮】2026非专业软件能力认证原卷和答案