选择题 共15道

01 02 03 04 05 06 07 08 09 10 11 12 13 14 15


阅读程序 共17道

16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32


完善程序 共10道

33 34 35 36 37 38 39 40 41 42

736 2025年CSP-J模拟卷-1-考试
选择题 共15道
01 在标准 ASCII 码表中,已知英文字母 c 的 ASCII 码十进制表示是 99,那么英文字母 x 的 ASCII 码十六进制表示是( )。 2分
登录后查看选项
02 以下关于 CSP 与 GESP 的描述正确的是( )。 2分
登录后查看选项
03 以下可以用作 C++ 程序中的变量名的是( )。 2分
登录后查看选项
04 以下不属于桌面或者手机操作系统的是( )。 2分
登录后查看选项
05 C++中使用输入和输出函数 cin 和 cout 会用到( )头文件。 2分
登录后查看选项
06 寻找最短路径的广度优先搜索算法经常用到的数据结构是( )。 2分
登录后查看选项
07 以下哪个域名后缀不属于中华人民共和国管辖?( ) 2分
登录后查看选项
08 下列排序算法中,平均情况下( )算法的时间复杂度最小。 2分
登录后查看选项
09 关于计算机网络,下面的说法中正确的是( )。 2分
登录后查看选项
10 序列(7, 5, 1, 12, 3, 6, 9, 4)的逆序对有( )个。 2分
登录后查看选项
11 下列属于图像文件格式的是( )。 2分
登录后查看选项
12 不管 P、Q 如何取值,以下逻辑表达式中取值恒为假的是( )。 2分
登录后查看选项
13 树的根结点的高度为 1,某完全二叉树有 2025 个结点,其高度是( )。 2分
登录后查看选项
14 现有 9 个苹果,要放入 5 个不同的盘子,允许有的盘子中放 0 个苹果,则不同的放法共有( )种。 2分
登录后查看选项
15 G 是一个非连通无向图(没有重边和自环),共有 36 条边,则该图至少有( )个顶点。 2分
登录后查看选项
阅读程序 共17道
16
01 #include< bits/stdc++.h>
02 using namespace std;
03
04 using i64=long long;
05
06 int popcount(i64 x)
07 {
08 	int res = 0;
09 	while(x)
10 	{
11 		if(x & 1 == 1)
12 			res++;
13 		x >>= 1;
14 	}
15 	return res;
16 }
17
18 int calc(i64 x)
19 {
20 		int sum = 0;
21 		for(i64 i = 1; i <= x; i++)
22 			sum += popcount(i);
23 		return sum;
24 }
25
26 int sum(i64 l, i64 r)
27 {
28 		return calc(r) - calc(l);
29 }
30
31 int main()
32 {
33 		i64 l, r;
34 		cin >> l >> r;
35 		cout << calc(l) << ' ' << sum(l, r) << endl;
36 		return 0;
37 }

若程序输入为 5 8,则程序输出 7 6。 ( )

1.5分
登录后查看选项
17 若将第 11 行中的&符号改为^符号,程序输出结果一定不会改变。 ( ) 1.5分
登录后查看选项
18 若将头文件#include < bits/stdc++.h>改成#include < stdio.h>,程序仍能正常运行。 ( ) 1.5分
登录后查看选项
19 若输入为 1 12,则输出是什么?( ) 3分
登录后查看选项
20 程序中的 sum 函数实现了什么功能?( ) 3分
登录后查看选项
21
01 #include < bits/stdc++.h>
02 using namespace std;
03
04 const int inf = 0x3f3f3f3f;
05
06 int solve(vector &cur)
07 {
08 		int n = cur.size();
09 		vector> dp(n + 1, vector(n + 1, inf));
10 		for(int i = 0; i <= n; i++)
11 			dp[0][i] = dp[i][0] = 0;
12 		for(int i = 1; i <= n; i++)
13 			dp[i][i] = cur[i - 1];
14 		for(int i = 1; i <= n; i++)
15 			for(int j = 1; j <= n; j++)
16 				if(i != j)
17 					dp[i][j]=min(dp[i][j],dp[i-1][j]+dp[i][j-1]);
18 		int ans = 0;
19 		for(int i = 1; i <= n; i++)
20 			ans = max(ans, dp[n][i]);
21 		return ans;
22 }
23
24 int main()
25 {
26 		int n;
27 		cin >> n;
28 		vector cost(n);
29 		for(int i=0;i< n;i++)
30			cin>>cost[i];
31		cout<< solve(cost)<< endl;
32 		return 0;
33 }

若输入为3 1 2 3,则输出为3。

1.5分
登录后查看选项
22 计算dp数组的时间复杂度为 O(n²)。 1.5分
登录后查看选项
23 若将第28行改为vector cost(n+1),则当输入3 1 2 3时,solve函数中的n=3。 2分
登录后查看选项
24 当输入的cost数组为 {4,0,0,5,6} 时,程序的输出为( )。 3分
登录后查看选项
25 若将第17行改为dp[i][j] = min(dp[i][j], dp[i-1][j]-dp[i][j-1]),则当输入的cost数组为{4,0,0,5,6} 时,程序的输出为( )。 3分
登录后查看选项
26 当输入的cost数组为{4,0,0,5,6} 时,在solve函数中,dp[2][3] 的值为( )。 4分
登录后查看选项
27

假设输入均为非负数,完成下面的问题

01 #include < bits/stdc++.h>
02 using namespace std;
03
04 int func(int a,int b)
05 {
06		if(a==0)
07			return b;
08		if(b==0)
09			return a;
10		return a+func(b,a%b);
11 }
12
13 int main()
14 {
15		int x,y;
16		cin>> x>> y;
17		cout<< func(x,y)<< endl;
18		return 0;
19 }

当输入为2 3时,程序的输出为5。

1.5分
登录后查看选项
28 若输入只有一个为0,则程序的输出为输入的另一个数字。 1.5分
登录后查看选项
29 当输入为6 8时,func函数将会被进入4次。 1.5分
登录后查看选项
30 当输入为6 8时,程序的输出为( )。 3分
登录后查看选项
31 当输入为3 5时,func函数的调用顺序是( )。 3分
登录后查看选项
32 若将第10行的代码改为return a + func(b,a-b),则当输入为3 5时,得到的输出为( )。 4分
登录后查看选项
完善程序 共10道
33

给定一个整数数组colors和一个整数k,其中colors表示一个由红色瓷砖和蓝色瓷砖组成的环,第 i 块瓷砖的颜色为 colors[i] (1 代表红色,0 代表蓝色)。环中连续 k 块瓷砖的颜色如果是交替颜色(除了第一块和最后一块瓷砖以外,中间瓷砖的颜色与它左边瓷砖和右边瓷砖的颜色都不同),那么它被称为一个交替组。现在,请你找出交替组的个数。

01 #include < iostream>
02 #include <①>
03
04 using namespace std;
05
06 int main()
07 {
08    int n, k;
09    cin >> n >> k;
10    vector colors(n);
11    for(int i = 0; i < n; i++)
12    		cin >> colors[i];
13    int ans = 0, cnt = ②;
14    for(int i = 0; i < ③; i++)
15    {
16    		if(i > 0 && ④)
17    			cnt = 0;
18    		cnt++;
19    		ans += (⑤ && cnt >= k);
20    }
21    cout << ans << endl;
22    return 0;
23 }

①处应填( )。

3分
登录后查看选项
34 ②处应填( )。 3分
登录后查看选项
35 ③处应填( )。 3分
登录后查看选项
36 ④处应填( )。 3分
登录后查看选项
37 ⑤处应填( )。 3分
登录后查看选项
38
题目描述:

在国际象棋中,马的一次移动定义为:垂直移动两个方格后再水平移动一个方格,或者水平移动两个方格后再垂直移动一个方格(两者都形成一个L的形状)。 现在,我们有一个马和一个电话垫(如下所示),马只能站在数字单元格上。你可以将马放置在任何数字单元格上,然后你应该执行n-1次移动来获得长度为n的号码。马所有的移动应该是符合规则的有效的移动。马在一次移动的过程中可以经过符号单元格,但必须保证这次移动结束后马站在数字单元格上。 给定一个整数n,请你计算可以得到多少个长度为n的数字串。由于答案可能很大,请你输出答案对 109+7 取模后的结果。

01 #include < iostream>
02 #include < vector>
03 
04 using namespace std;
05 
06 const int mod = 1E9 + 7;
07 vector< vector< int>> pos = {{4, 6}, {6, 8}, {7, 9}, {4, 8}, {0, 3, 9},①,{0,1,7},{2,6},{1,3},{2,4}};
08 
09 int main()
10 {
11     int n;
12     cin >> n;
13     vector< vector< int>> dp(10, vector< int>(n + 1, 0));
14     for(int i = 0; i < 10; i++)
15         ② = 1;
16     for(int j = 2; j <= n; j++)
17		{
18         for(int i = 0; i < 10; i++)
19			{
20             for(int k = 0; k < pos[i].size(); k++)
21				{
22                 dp[i][j] += dp[③][j - 1];
23					④;
24				}
25			}
26		}
27     int ans = 0;
28     for(int i = 0; i < 10; i++)
29		{
30			⑤;
31     		ans %= mod;
32		}
33     cout << ans << endl;
34     return 0;
35 }

①处应填( )。

3分
登录后查看选项
39 ②处应填( )。 3分
登录后查看选项
40 ③处应填( )。 3分
登录后查看选项
41 ④处应填( )。 3分
登录后查看选项
42 ⑤处应填( )。 3分
登录后查看选项