#1743. CSP-J 2024 第一轮(初赛)模拟Ⅰ
CSP-J 2024 第一轮(初赛)模拟Ⅰ
一、单项选择题(共25题,每题3分,共计75 分﹔每题有且仅有一个正确选项)
1、正整数319和377的最大公约数是( )
{{ select(1) }}
- 27
- 33
- 29
- 31
2、与十进制数1770对应的八进制数是( )
{{ select(2) }}
- 3350
- 3351
- 3352
- 3540
3、十六进制数2070和八进制数34求和的结果是( )
{{ select(3) }}
- 用十进制数表示的结果为8332
- 用十六进制数表示的结果为208A
- 用二进制数表示的结果为100000000110
- 用八进制数表示的结果为20212
4、在C++语言中,按位或运算符(|)是指参加运算的两个数,按二进制位进行“或”运算,若两个数对应位上有一个为1,则该位上或运算的结果为1,否则为0。异或运算符(^)是指参加运算的两个数,按二进制位进行“异或”运算,若两个数对应位值不同,则该位结果异或运算的结果为1,否则为0。请计算表达式(23|2)^5的值是( )。
{{ select(4) }}
- 18
- 1
- 23
- 32
5、在C++语言中,三种逻辑运算符运算(注意这里不是按位运算)规则如下:
运算符 | 示例 | 运算规则 |
---|---|---|
逻辑与(&&) | a&&b | 如果a和b都为真,结果为真,否则为假 |
逻辑或(||) | a||b | 如果a和b有一个为真,则结果为真,二者都假,结果为假 |
逻辑非(!) | !a | 如果a为假,!a为真,如果a为真,!a为假 |
判断a等于0或b等于0或c等于0的正确的条件表达式是( )
{{ select(5) }}
- !((a!=0)||(b!=0))
- !((a!=0)&&(b!=0)&&(c!=0))
- !(a==0 && b==0)||(c!=0)
- (a=0)&&(b=0)&&(c=0)
6、如果字符串s在字符串T中出现了,则字符串s被称作字符串T的子串。设字符串T="Olympic",T的非空子串的数目是( ) 。
{{ select(6) }}
- 28
- 29
- 16
- 17
7、将数组{8,23,4,16,77,-5,53,100} 中的元素按从大到小的顺序排列,每次可以交换任意两个元素,最少需要交换( )次。 {{ select(7) }}
- 4
- 5
- 6
- 7
8、书架上有21本书,编号从1到21,从其中选4本,其中每两本的编号都不相邻的选法一共有( )种。
{{ select(8) }}
- 1530
- 3020
- 3060
- 4096
9、队列快照问题: 队列快照是指在某一时刻队列中的元素组成的有序序列。例如,当元素1,2,3入队,元素1出队后,此刻的队列快照是2,3。当元素2,3也出队后,队列快照是"",即为空。现有3个正整数元素依次入队、出队。已知它们的和为8,则共有()种可能的不同的队列快照(不同队列的相同快照只计一次)。例如,"5,1"、"4,2,2"、""都是可能的队列快照;而"7”不是可能的队列快照,因为剩下的2个正整数的和不可能是1。
{{ select(9) }}
- 36
- 42
- 49
- 58
10、定义字符串的基本操作为:删除一个字符、插入一个字符和将一个字符修改成另外一个字符这三种操作。将字符串A变成字符串B的最少操作步数,称为字符串A到字符串B的编辑距离。字符串"ABCDEFG”到字符串"BADECG”的编辑距离为( )
{{ select(10) }}
- 3
- 4
- 6
- 7
11、在数组A[x]中,若存在(i<j)&&(A[i]>A[i]),则称(A[i],A[i])为数组A[x]的一个逆序对。对于序列7,5,1,9,3,6,8,4,在不改变顺序的情况下,去掉()会使逆序对的个数减少3。
{{ select(11) }}
- 7
- 5
- 3
- 8
12、定义一种字符串操作,一次可以将其中一个元素移到任意位置。举例说明,对于字符串"BCA”可以将"A"移到"B"之前,变字符串"ABC"。如果要将字符串 "DACHEBGIF”变成"ABCDEFGHI"最少需要()次操作。
{{ select(12) }}
- 3
- 4
- 5
- 6
13、原字符串中任意一段连续的字符所组成的新字符串称为子串。则字符"AAABBBCCC”共有( )个不同的非空子串。
{{ select(13) }}
- 3
- 12
- 36
- 45
14、如图,每条边上的数字表示该边的长度,则从A到E的最短距离是( )。
{{ select(14) }}
- 10
- 11
- 12
- 13
15、重新排列1234使得每一个数字都不在原来的位置上,一共有( )种排法。
{{ select(15) }}
- 7
- 9
- 24
- 44
16、在某大型国际比赛期间,主办单位为了欢迎来自各国的选手,举行了盛大的晚宴。在第十八桌,有5名大陆选手和5名港澳选手共同进膳。为了增进交流,他们决定相隔就坐,即每个大陆选手左右旁都是港澳选手,每个港澳选手左右旁都是大陆选手。那么,这一桌一共有()种不同的就坐方案。
{{ select(16) }}
- 1200
- 2480
- 2880
- 14400
17、在不超过10000的正整数中,与10000互质的正整数有()个。
{{ select(17) }}
- 2000
- 4000
- 6000
- 8000
18、一个1×8的方格图形(不可旋转)用黑、白两种颜色填涂每个方格。如果每个方格只能填涂一种颜色,且不允许两个黑格相邻,共有()种填涂方案。
{{ select(18) }}
- 55
- 68
- 72
- 82
19、一个人站在坐标(0,0)处,面朝x轴正方向。第一轮,他向前走1单位距离,然后右转;第二轮,他向前走2单位距离,然后右转;第三轮,他向前走3单位距离,然后右转......他一直这么走下去。请问第2017轮后,它的坐标是:(_._)。
{{ select(19) }}
- 1009,1008
- 1009,1010
- 1008,1009
- 1008,1008
20、在1和2015之间(包括1和2015在内)不能被4,5,6三个数任意一个数整除的数有()个。
{{ select(20) }}
- 100
- 1050
- 1075
- 1080
21 、地面上有标号为A、B、C的三根柱,在A柱上放有10个直径相同中间有孔的圆盘,从上到下依次编号为1,2,3...,将A柱上的部分盘子经过B柱移入C柱,也可以在B柱上暂存。如果B柱上的操作记录为"进、进、出、进、进、出、出、进、进、出、进、出、出”。那么,在C柱上,从下到上的编号为( )
{{ select(21) }}
- 2 4 3 6 5 7
- 2 4 1 2 5 7
- 2 4 3 1 7 6
- 2 4 3 6 7 5
22、有五副不同颜色的手套(共10只手套,每副手套左右手各1只),一次性从中取6只手套,请问恰好能配成两副手套的不同取法有( )种。
{{ select(22) }}
- 120
- 180
- 150
- 30
23、由1,1,2,2,3这五个数字组成不同的三位数有( )种。
{{ select(23) }}
- 18
- 15
- 12
- 24
24、小明希望选到形如"省A●LLDDD"的车牌号。车牌号在"●"之前的内容固定的5位号码中,前2位必须是大写英文字母,后3位必须是阿拉伯数字(L代表A至Z,D表示0至9,两个L和三个D之间可能相同也可能不同)。请问总共有()个可供选择的车牌号。
{{ select(24) }}
- 20280
- 52000
- 676000
- 1757600
25、假设有n根柱子,需要按照以下规则依次放置编号为1,2,3,…的圆环:每根柱子的底部固定,顶部可以放入圆环;每次从柱子顶部放入圆环时,需要保证任何两个相邻圆环的编号之和是一个完全平方数。请计算当有4根柱子时,最多可以放置( )个圆环
{{ select(25) }}
- 7
- 9
- 11
- 5
二、程序阅读(共2题,第1道小题10分,第2道小题5分,共计15分)
1、阅读下面的程序,完成第(26)到第(30)道小题,每道小题2分。
01 #include <iostream>
02 using namespace std;
03 const int N = 10;
04 int main()
05 {
06 int h[N], a[N], n, ans;
07 cin >> n;
08 for (int i = 0; i < n; i++)
09 {
10 cin >> h[i];
11 a[i] = 1;
12 for (int j = 0; j < i; j++)
13 if ((h[j] < h[i]) && (a[j] >= a[i]))a[i] = a[j] + 1;
14 }
15 ans = 0;
16 for (int i = 0; i < n; i++)
17 if (a[i] > ans)ans = a[i];
18 cout << ans << endl;
19 return 0;
20 }
●判断题(判断题正确选择A,错误答题选择B)
(26)、如果h 数组中的输入有负数,则程序会出错。
{{ select(26) }}
- 正确
- 错误
(27)、程序输出的ans小于或等于n。
{{ select(27) }}
- 正确
- 错误
(28)、将第13行“a[j]>= a[i]”改为“a[j]>a[i]”输出结果不会改变。
{{ select(28) }}
- 正确
- 错误
●选择题
(29)、若输入的数据为:10
1 1 1 1 1 1 1 1 1 1
则程序的输出结果是( )
{{ select(29) }}
- 1
- 2
- 3
- 4
(30)、若输入的数据为:10
3 2 5 11 12 7 4 10 15 6
因程序的输出结果是( )
{{ select(30) }}
- 2
- 3
- 4
- 5
2、阅读下面的程序,完成第(31)到第(34)道小题。
1 #include<cstdio>
2 using namespace std;
3 int n,m,a[100],b[100];
4 int main()
5 {
6 scanf("%d%d" ,&n, &m);
7 for(int i=1;i<=n;i++) a[i]=b[i]=0;
8 for(int i=1;i<=m;i++)
9 {
10 int x,y;
11 scanf("%d%d" ,&x,&y);
12 if(a[x]<y && b[y]<x)
13 {
14 if(a[x]>0) b[a[x]]=0;
15 if(b[y]>0)a[b[y]]=0;
16 a[x]=y;
17 b[y]=x;
18 }
19 }
20 int ans = 0;
21 for(int i=1;i<=n;i++)
22 {
23 if(a[i]==0) ans++;
24 if(b[i]==0) ans++;
25 }
26 printf("%d", ans);
27 return 0;
28 }
●判断题(判断题正确答题选择A,错误答题选择B,每小题1分)
(31)当m>0时,输出的值-定小于2n。
{{ select(31) }}
- 正确
- 错误
(32)执行完第24行的ans++时,ans 一定是偶数。
{{ select(32) }}
- 正确
- 错误
(33) a[i] 和b[i]不可能同时大于0。
{{ select(33) }}
- 正确
- 错误
●选择题(请选择正确答案,本小题2分)
(34)若m个x两两不同,且m个y两两不同,则输出的值为( )
{{ select(34) }}
- 2n - 2m
- 2n +2
- 2n -2
- 2n
三、程序完善(共5道小题,每小题2分,共计10分)
质因数分解: 给定一个正整数n,输出将n质因数分解的结果,结果从小到大输出。例如:当n = 120时程序应该输出2 2 2 3 5,表示:120=2×2×2×3×5。输入保证2≤n≤
提示:先从小到大枚举变量i,然后用i不停试除n来寻找所有的质因子。
试补全程序。
1 #include<cstdio>
2 using namespace std;
3 int n,j;
4 int main()
5 {
6 scanf("%d",&n);
7 for(i=①;②<=n;i++)
8 {
9 ③
10 {
11 printf("%d",i);
12 n=n/i;
13 }
14 }
15 if(④)printf("%d",⑤);
16 return 0;
17 }
(35)空缺①处应该填( )
{{ select(35) }}
- 1
- n-1
- 2
- 0
(36)空缺②处应该填( )
{{ select(36) }}
- n/i
- n/(i*i)
- i*i
- i * i * i
(37)空缺③处应该填( )
{{ select(37) }}
- if(n%i==0)
- if(i*i<=n)
- while(n%i==0)
- while(i*i<=n)
(38)空缺④处应该填()
{{ select(38) }}
- n>1
- n<=1
- i<n/i
- i+i<=n
(39)空缺⑤处应该填( )
{{ select(39) }}
- 2
- n/i
- n
- i