夜雨聆风学习资料网

ARTICLE · 1039860

认证-2026年CSPJ入门组初赛试题卷

认证-2026年CSPJ入门组初赛试题卷

CSP-J/S NOIP 收录列表(2008年~2026年)

所有训练场 都包含 答案与解析

CSP-J入门组、NOIP普及组

训练地址https://tb.cnmiaosi.cn/index.php?exam-app-basics-detail&basicid=64

试卷名称
认证-2026年CSPJ入门组初赛试题卷
竞赛-2025年CSPJ入门组初赛试题卷
竞赛-2024年CSPJ入门组初赛试题卷
竞赛-2023年CSPJ入门组初赛试题卷 
竞赛-2022年CSPJ入门组初赛真题卷       
竞赛-2021年CSPJ入门组初赛真题卷
竞赛-2020年CSPJ入门组初赛真题卷
竞赛-2019年CSPJ入门组初赛真题卷
竞赛-2018年NOIP普及组初赛真题卷
竞赛-2017年NOIP普及组初赛真题卷
竞赛-2016年NOIP普及组初赛真题卷
竞赛-2015年NOIP普及组初赛真题卷
竞赛-2014年NOIP普及组初赛真题卷
竞赛-2013年NOIP普及组初赛真题卷
竞赛-2012年NOIP普及组初赛真题卷
竞赛-2011年NOIP普及组初赛真题卷
竞赛-2010年NOIP普及组初赛真题卷
竞赛-2009年NOIP普及组初赛真题卷
竞赛-2008年NOIP普及组初赛真题卷

CSP-S提高组、NOIP提高组

训练地址https://tb.cnmiaosi.cn/index.php?exam-app-basics-detail&basicid=112

试卷名称
竞赛-2025年CSPS提高组初赛试题卷
竞赛-2024年CSPS提高组初赛试题卷
竞赛-2023年CSPS提高组初赛试题卷
竞赛-2022年CSPS提高组初赛真题卷
竞赛-2021年CSPS提高组初赛真题卷
竞赛-2020年CSPS提高组初赛真题卷
竞赛-2019年CSPS提高组初赛真题卷
竞赛-2018年NOIP提高组初赛真题卷
竞赛-2017年NOIP提高组初赛真题卷
竞赛-2016年NOIP提高组初赛真题卷
竞赛-2015年NOIP提高组初赛真题卷
竞赛-2014年NOIP提高组初赛真题卷
竞赛-2013年NOIP提高组初赛真题卷
竞赛-2012年NOIP提高组初赛真题卷
竞赛-2011年NOIP提高组初赛真题卷
竞赛-2010年NOIP提高组初赛真题卷
竞赛-2009年NOIP提高组初赛真题卷
竞赛-2008年NOIP提高组初赛真题卷       
一、单选题

第1题

下列C++数据类型中,能够精确存储1018 + 1 这个整数的是( )。

A. floatB. long longC. doubleD. int

第2题

十六进制数2F5转换为八进制数是( )。

A. 1364B. 1635C. 1405D. 1365

第3题

执行下列C++代码,输出是( )。

int a = 7, b = 3;std::cout << a / b * b + a % b;

A. 9B. 10C. 7D. 6

第4题

初始时栈为空,将1、2、3、4依次入栈,入栈过程中允许随时出栈。下列出栈序列中不可能出现的是( )。

A. 2,4,3,1B. 1,2,3,4C. 3,1,2,4D. 1,4,3,2

第5题

一棵有100个结点的完全二叉树,其叶子结点个数是( )。

A. 49B. 50C. 64D. 51

第6题

执行下列代码后 s 的值是( )。

int s = 0;for (int i = 1; i <= 100; i++)    if (i % 3 == 0 || i % 5 == 0)        s += i;

A. 3048B. 2733C. 2318D. 2418

第7题

上楼梯每步可上1级、2级或3级,从地面(可视为第0级)走到第8级台阶共有多少种不同走法( )。

A. 44B. 121C. 149D. 81

第8题

下图为 5×5 网格,行号、列号均从0开始,# 为障碍,. 为可通行格:

S..#. ...#. ...#. ##..E ...#.

从S出发做广度优先搜索(BFS):初始时把S入队;每次取出队首格子,按“上、下、左、右”(上=行号减1,下=行号加1,左=列号减1,右=列号加1)的顺序遍历它的四个相邻格子,越界、障碍或已访问的格子跳过,其余格子标记为已访问并入队。当E第一次入队时,已经入队过的格子(含S和E)共有多少个( )。

A. 15B. 12C. 14D. 13

第9题

满足 1≤n≤100 且 gcd(n,60)=6 的正整数 n 共有多少个( )。

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

第10题

某国硬币面值为1元、4元、6元且数量不限,凑出9元最少需要多少枚( )。

A. 3B. 4C. 5D. 2

第11题

执行下列代码,输出是( )。

int a[5] = {1, 3, 5, 7, 9};int *p = a + 2;*(p - 1) = p[0] + p[2];p[1] = *(a + 1) - a[0];cout << a[1] << "," << a[3];

A. 14,13B. 8,13C. 14,7D. 14,2

第12题

在含1000个互不相同元素的升序数组中,用二分法查找给定值(返回元素位置或报告不存在),最坏情况下需要与数组元素比较多少次?

A. 500B. 9C. 11D. 10

第13题

数组 a[1..n] 的前缀和数组 s(即 s[i] = a[1]+a[2]+…+a[i])满足 s[i] = 3i²+i。则 a[10] 的值是( )。

A. 252B. 310C. 58D. 61

第14题

数轴上有7个点,坐标分别为1、3、4、7、10、15、20。在数轴上任选一个整数坐标点P,使P到这7个点的距离之和最小,这个最小距离和是( )。

A. 37B. 42C. 40D. 38

第15题

一个无向图有10个顶点,其中4个顶点的度为3,其余顶点的度均为4,则该图的边数是( )。

A. 36B. 18C. 17D. 20


二、CSP-阅读程序题

第1题

阅读程序(1)

#include  < iostream>2 using namespace std;3 int main() {4     int n;5     cin >> n;6     int x = 1, y = 1;7     while (n > 0) {8         if (n % 2 == 0) {9             ++x;10         } else {11             ++x;12             ++y;13         }14         n = n / 2;15     }16     cout << x << ' ' << y << endl;17     return 0;18 }

以下问题均假定输入的 n 为不超过 2³¹−1 的非负整数。

第1题

(1分)当输入为3时,程序输出为 3 3。( )

A. 正确B. 错误

第2题

将第11行的 ++x; 删除后,程序输出的两个数一定相等。( )

A. 正确B. 错误

第3题

假设输入为非负整数,则程序输出的第一个数一定不小于第二个数。( )

A. 正确B. 错误

第4题

将第7行的 while (n > 0) 改为 while (n >= 0) 后,程序可能出现的问题是( )。

A. 陷入死循环B. 输出结果比原来大C. 输出结果比原来小D. 输出结果不受影响

第5题

当输入为6时,输出为( )。

A. 3 3B. 4 2C. 4 3D. 5 2

第6题

若输入 n 依次取遍 0, 1, 2, …, 2³¹−1 中的所有整数,则程序输出的第二个数恰好为2的次数为( )。

A. 16B. 30C. 31D. 32

第2题

阅读程序(2)

#include <algorithm>#include <iostream>#include <string>4 using namespace std;5 int a[100007], b[100007], c[100007], carry[100007];6 string input_str;7 int a_len, b_len;8 int main() {9     cin >> input_str;10     a_len = input_str.size();11     for (int i = 0; i < a_len; i++) {12         a[i] = input_str[a_len - i - 1] - '0';13     }14     cin >> input_str;15     b_len = input_str.size();16     for (int i = 0; i < b_len; i++) {17         b[i] = input_str[b_len - i - 1] - '0';18     }19     carry[0] = 0;20     for (int i = 0; i < max(a_len, b_len) + 1; i++) {21         c[i] = a[i] + b[i] + carry[i];22         if (c[i] >= 10) {23             carry[i + 1] = 1;24             c[i] -= 10;25         } else {26             carry[i + 1] = 0;27         }28     }29     for (int i = max(a_len, b_len); i >= 0; i--) {30         cout << c[i];31     }32     cout << endl;33     return 0;34 }

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

第1题

当输入为 123 456 时,程序输出为 0579。( )

A. 正确B. 错误

第2题

假设输入的两个数均不含前导零,则程序输出的结果也一定不会含有前导零。( )

A. 正确B. 错误

第3题

将第21行改为 c[i] = a[i] + b[i]; 后,程序输出的结果一定比原来的结果小。( )

A. 正确B. 错误

第4题

当输入为 12345 678 时,输出为( )。

A. 012923B. 013023C. 13023D. 130230

第5题

将第22行的 if (c[i]>=10) 改为 if (c[i]>10) 后,当输入为 95 15 时,输出为( )。

A. 01010B. 110C. 140D. 1410

第6题

假设输入的两个数均为 n 位正整数(不含前导零),且它们的和小于 10ⁿ,则程序输出的字符串一定满足( )。

A. 第一个字符一定不为 '0'B. 长度一定为 nC. 长度一定为 n+1,且第一个字符为 '0'D. 长度可能为 n+2

第3题

阅读程序(3)

#include < iostream>2 using namespace std;3 bool check_prime(int x) {4     if (x <= 1) return false;5     for (int i = 2; i * i <= x; i++) {6         if (x % i == 0) return false;7     }8     return true;9 }10 int n;11 void search_result(int x) {12     if (!check_prime(x)) return;13     if (x >= n) {14         cout << x << endl;15         return;16     }17     for (int i = 0; i <= 9; i++) {18         search_result(x * 10 + i);19     }20 }21 int main() {22     cin >> n;23     for (int i = 1; i <= 9; i++) search_result(i);24     return 0;25 }

第1题

当输入为10时,程序的输出共有10行。( )

A. 正确B. 错误

第2题

若输入的 n 不大于5,则程序的输出中一定包含5。( )

A. 正确B. 错误

第3题

若输入的 n 大于10,将第17行的 for (int i=0;i<=9;i++) 改为 for (int i=1;i<=9;i+=2) 后,程序的输出结果一定不变。( )

A. 正确B. 错误

第4题

当输入为24时,程序输出的第3行为( )。

A. 23B. 29C. 31D. 239

第5题

下列关于该程序输出的说法中,正确的是( )。

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

第6题

当输入为200时,程序输出的行数为( )。

A. 12B. 13C. 14D. 15


三、CSP-完善程序题

第1题

完善程序(1)进制减半给定 n、m,再给定一个 m×n 进制下的数 A,其各个数位上的数按照从高位到低位的顺序给出,请你将其转化为 n 进制,并同样按照从高位到低位的顺序输出。输入的第一行依次为 n、m 和 A 的位数 d,接下来 d 个数从高位到低位描述各个数位上的数。数据满足 2≤n,m≤10,1≤d≤18,0≤A<263,且每个数位上的数均小于 m×n。以下程序按“逐位除以 n”的方法完成进制转换,请补全程序。

#include <iostream>constexpr int N = 100005;long long b[N];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[j] = ①;        b[0] = ②;        len++;        for (int j = 0; j < len; j++)            if (b[j] >= n) {                b[j + 1] += ③;                b[j] = ④;                if (j + 1 == len) len++;            }    }    while (⑤) len--;    for (int i = len - 1; i >= 0; i--)        std::cout << b[i] << ' ';    return 0;}

第1题

①处应填( )。

A. b[j] * nB. b[j] * mC. b[j - 1] * nD. b[j - 1] * m

第2题

②处应填( )。

A. x * nB. xC. 0D. m

第3题

③处应填( )。

A. b[j] / mB. b[j] % nC. b[j] % mD. b[j] / n

第4题

④处应填( )。

A. b[j] / mB. b[j] % nC. b[j] % mD. b[j] / n

第5题

⑤处应填( )。

A. len > 0 && b[len - 1] == 0B. len > 0 && b[0] == 0C. len > 1 && b[len - 1] == 0D. len > 1 && b[0] == 0

第2题

完善程序(2)平衡分割

给定一个长度为 n 的字符串,其中每个字符都是一个十六进制数位。例如,字符串 `016A` 表示十进制下的四个数 0、1、6、10。 现在请选择 k 个(k 是你选定的数)切分位置 p₁、p₂、…、pₖ,其中 1 ≤ k < n,且 1 ≤ p₁ < p₂ < … < pₖ < n。 对于每个 i(1 ≤ i ≤ k+1),计算第 pᵢ₋₁+1 个数到第 pᵢ 个数的平均值,记作 bᵢ(约定 p₀ = 0,pₖ₊₁ = n)。你的目标是使 bᵢ 中最大值与最小值之差尽可能小,并输出这个最小值。 - 输入字符串中的字符只可能是 `'0'`–`'9'` 或 `'A'`–`'F'`。 - 本题假定字符采用 ASCII 编码。 - 输出答案时保留小数点后 6 位。 以下程序通过递归枚举所有可能的连续分段方案,请补全程序。

#include < algorithm> #include < iomanip> #include <iostream> using namespace std; constexpr int N = 25; int n, a[N]; char s[N]; 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[r];         double nwb = ③ ;         split( ④ );     } } int main(){     cin >> n >> s + 1;     for (int i = 1; i <= n; ++i)         a[i] = value(s[i]);     split( ⑤ );     cout << fixed << setprecision(6) << ans; }

第1题

①处应填( )。

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)

第2题

②处应填( )。

A. int r = l + 1; r <= n; ++rB. int r = l; r < n; ++rC. int r = l; r <= n; r += 2D. int r = l; r <= n; ++r

第3题

③处应填( )。

A. sum / (r - l + 1) * 1.0B. sum * 1.0 / (r - l) + 1C. sum * 1.0 / (r - l + 1)D. (sum - a[r]) * 1.0 / (r - l + 1)

第4题

④处应填( )。

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)

第5题

⑤处应填( )。

A. 0, 0, 1e100, -1e100B. 0, 0, -1e100, 1e100C. 1, 0, -1e100, 1e100D. 1, 0, 1e100, -1e100

相关学习资料