#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≤10910^9

提示:先从小到大枚举变量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