#C1217. 2024CSPJ初赛模拟题(八)
2024CSPJ初赛模拟题(八)
一、单项选择题
共15题,每题2分,共计30分;
- 十六进制数(-73)16的8位二进制补码是()。 {{ select(1) }}
- 10001110
- 10001101
- 01110010
- 01110011
- 以下关于CSP-J/S的描述错误的是()。 {{ select(2) }}
- CSP-J/S非专业认证在校生与在职人员皆可参加
- CSP-J/S是中国计算机学会举办的程序设计竞赛
- CSP-J/S属于NOI系列赛事
- CSP-J/S第二轮实现网上注册、报名,未通过网上报名的认证者可 以向本省特派员申请获得第二轮认证资格
- 以下语言中,同时符合面向对象和解释执行的是什么语言()。 {{ select(3) }}
- Python
- Fortran
- C++
- Pascal
- 某足校买了一台小米的4K 超清电视,其屏幕分辨率是4096×2160,每一 个像素都是32位真彩色,一个足球比赛的视频文件有4分钟,每秒钟播放24 帧。在无压缩情况下请计算这个视频占用空间最接近以下哪个值()。 {{ select(4) }}
- 90 GB
- 125 GB
- 200 GB
- 100 GB
- 假设一个待排序数组已基本有序,以下排序算法效率最高的是()。 {{ select(5) }}
- 插入排序
- 快速排序
- 归并排序
- 选择排序
- 一棵包含m 个分支结点(也就是度不为0的节点)的非空满n 叉树,其中 n≥1, 这棵树的度为0的结点(叶子结点)数目为()。 {{ select(6) }}
- mn+1
- mn-1
- nm+m-1
- nm-m+1
- 前缀表达式-*1+234的后缀表达式是()。 {{ select(7) }}
- 1234*+-
- 123+*4-
- 123*+4-
- -+*1234
- 关于CPU 的说法如下哪个是正确的?() {{ select(8) }}
- CPU 只有Intel 和 AMD 公司才能生产
- Intel公司发明了世界上最早的CPU
- CPU 能直接运行机器语言
- 现在有昂贵的GPU, 不需要CPU 台式电脑也可以正常运行
- 关于计算机网络,下面的说法哪些是正确的?() {{ select(9) }}
- 网络协议之所以分层主要是新技术需要兼容历史上老的实现方案
- 由于网络地址不够用,新一代互联网使用的IPv5标准的地址
- TCP/IP是互联网的基础协议族,包含有传输层和网络层的通信协议
- 互联网上每一台主机都需要一个IPv6 地址才能正常工作
- 设某哈希表的地址空间为0到10,对应散列函数为hash(n)=n%11, 如 果用线性探查法解决碰撞。从空的哈希表开始,依次插入关键码值71,25, 84,57,38,则最后一个关键码38的地址为()。 {{ select(10) }}
- 3
- 6
- 4
- 5
- 现在有一个十进制数0.125,它等于十六进制数的多少?() {{ select(11) }}
- 0.10
- 0.80
- 0.40
- 0.20
- 以下逻辑表达式里面不管A,B 如何取值恒为真的是?() {{ select(12) }}
- (¬A∩B)V(A∩B)VA
- (¬A∩B)V(A∩¬B)VB
- (¬A∩B)V(A∩¬B)VBVA
- (¬A∩B)V(A∩¬B)VAV¬B
- 函数rand() 可以生成一个0到32767范围的随机整数,现在希望得到一 个范围在[a,b]的随机整数,a 和b 都是正整数并且都不超过1024同时还有 a<b, 那么下述表达式哪个是可行的?() {{ select(13) }}
- rand()%(b-a)+a
- rand()%(b-a+1)+a
- rand()%(b-a)+a+1
- rand()%(b-a+1)+a+1
- 某学校1位领队带5名参加python竞赛的队员和4名参加C++竞赛的队员排成一行拍照留念,要求参加python竞赛的队员必须排在一起,领队必须在中间,参加C++竞赛的队员也必须排在一起,一共有()种不同的排列方式。 {{ select(14) }}
- 11520
- 5760
- 2880
- 8640
- 有11个结点的非连通无向图最多有()条边。 {{ select(15) }}
- 55
- 90
- 72
- 45
二、阅读程序(程序输入不超过数组或字符串定义的范围;判断题正确填√, 错误填×;除特殊说明外,判断题1.5分,选择题3分,共计40分)
01 #include<iostream>
02 using namespace std;
03 int main()
04 {
05 int x,y,z,W;
06 cin>>x>>y>>z;
07 X=X^y;
08 y=X^y;
09 X=X^y;
10 z=x/y;
11 W=z&(z-1);
12 cout<<x<<" "<<y<<" "<<z<<" "<<w;
13 return 0;
14 }
▶判断题
- 若输入4 8 1,则x,y,z的输出结果为8 4 2。 ( ) {{ select(16) }}
- 正确
- 错误
- 若输入987654321 9 1, 输出y、z分别是987654321和109739369 ( ) {{ select(17) }}
- 正确
- 错误
- 若输入9 2023 9,则输出w 是192。 ( ) {{ select(18) }}
- 正确
- 错误
- 将第1行头文件#include替换成#include, 第12 行替换为printf("%d %d %d %d\n",x,y,z,w);程序运行结果不会改变。() {{ select(19) }}
- 正确
- 错误
▶选择题
- 若输入数据为3113,则输出为()。 {{ select(20) }}
- 11333
- 11332
- 31132
- 31133
- 若将10行z=x/y改成z=x%y,输入0 2023 9,则输出是()。 {{ select(21) }}
- 2023001
- 2023091
- 0202391
- 程序出错无输出
01 #include<bits/stdc++.h>
02 using namespace std;
03 int n,m,total,a[105],b[105];
04 int fun(int x,int y)
05 {
06 if(0==y)
07 return 1;
08 else
09 return fun(x,y-1)*x;
10 }
11 int main()
12 {
13 intj=2;
14 scanf("%d",&n);
15 while(1 !=n)
16 {
17 if(0==n%j)
18 {
19 ++m;
20 a[m]=j;
21 while(0==n%j)
22 {
23 ++b[m];
24 n=n/j;
25 }
26 }
27 ++j;
28 }
29 total=1;
30 for(int k=1;k<=m;++k)
31 {
32 total*=(a[k]-1)*fun(a[k],b[k]-1);
33 }
34 printf("%d",total);
35 return 0;
36}
▶判断题
- 不管n 输入什么值,程序的输出值 total一定不比输入值n 小 。 () {{ select(22) }}
- 正确
- 错误
- 若输入n 是一个大于2的质数,则输出total 不可能是质数。 () {{ select(23) }}
- 正确
- 错误
- 若输入n 是一个质数,程序执行到第29行时,j 的值等于输入的n 。() {{ select(24) }}
- 正确
- 错误
- 若输入n 的值等于某正整数c 的正整数d 次方 c^d (c,d>=2), 程序的第15 行循环执行完成后,m 的值为1,a[1]的值为c。() {{ select(25) }}
- 正确
- 错误
▶选择题
- 若输入n=4800, 则输出total 为 ( ) 。 {{ select(26) }}
- 1280
- 640
- 4800
- 960
- 若输出total=4800,则输入n 可能为()。 {{ select(27) }}
- 4800
- 18000
- 9000
- 7200
01 #include <bits/stdc++.h>
02 using namespace std;
03 char last[101],ch;
04 int main()
05{
06 int n,length=0;
07 scanf("%d",&n);
08 for (int i=0;i<=n;i++){
09 cin>>ch;
10 if(ch>=last[length])
11 last[++length]=ch;
12 else if(ch<last[l])
13 last[l]=ch;
14 else {
15 int 1=1,r=length,mid;
16 while (l<r-1){
17 mid=(l+r)/2;
18 if(last[mid]<=ch)
19 l=mid;
20 else r=mid;
21 }
22 last[r]=ch;
23 }
24 }
25 printf("%d\n",length);
26 return 0;
27 }
▶判断题
- 要使输出等于n, 输入的所有字符必须满足第i 个字符ASCII 整数值小于 第i+1 个字符的ASCII整数值(1<=i<=n-1) 。 () {{ select(28) }}
- 正确
- 错误
- 若输入数字个数超过101个,一定会发生数组下标溢出。 () {{ select(29) }}
- 正确
- 错误
- 将第17行替换为mid=1+(r-1)>>1), 程序运行结果不会改变。 () {{ select(30) }}
- 正确
- 错误
- 程序运行过程中,变量r 的值可能会等于n。 () {{ select(31) }}
- 正确
- 错误
▶选择题 (最后一题4分)
- 第22行last[r]=ch最多会运行( )次。 {{ select(32) }}
- 1
- n-2
- n-1
- n
- 若输入n=100, 且第16行的 while 循环运行了至少一次,那么输出结果 不可能是( )。 {{ select(33) }}
- 2
- 3
- 98
- 100
- 若输入数据为5 b c d a e a,则 输出是()。 {{ select(34) }}
- 4
- 2
- 5
- 3
三、完善程序(单选题,每小题3分,共计30分)
1.家住农村的小明同学想去最要好的朋友刘东家去玩,刚好前段时间台风弄的到处都是泥水坑,小明家在坐标(0,0)的位置,刘东家在坐标(X,Y)的位置(-100<=X,Y<=100),小明看到地上N(1<=N<=1000)个泥水坑, 每个泥水坑的坐标为(Ai,Bi)位置(-100<=Ai,Bi<=100),他不想弄脏白色运动鞋,小明只能平行坐标轴一格一格移动(不能走斜对角线或者跳格,每格路径长度为1),为了避开泥水坑并尽快赶到刘东家,至少要走多少路?
如果有路打印出路径长度,没有路打印“No Answer”。
输入描述: 第一行输入X,Y,N。 第二行到N+1行输入N个数对Ai,Bi。 输出描述: 输出一个整数,如果通过按字符不能使初始字符串变为最终字符串,则输出0,否则输出最少需要按几次字符可以使初始字符串变为最终字符串。
样例输入
1 2 7
0 2
-1 3
3 1
1 1
4 2
-1 1
2 2
样例输出
11
01 #include<bits/stdc++.h>
02 using namespace std;
03 bool a[1005][1005],v[1005][1005];
04 struct point
05{
06 int x,y,step;
07};
08 intdx[4]={0,1,0,-1},dy[4]={1,0,-1,0};
09 queue<point>r;
10 int main()
11{
12 int n,startx,starty,p,q;
13 cin>>startx>>starty>>n;
14 startx+=100,starty +=100,p=100,q=100;
15 for(inti=1;i<=n;i++)
16 {
17 intj,k;
18 cin>>j>>k;
19 ①=true;
20 }
21 point start;
22 start.x=startx;
23 start.y=starty;
24 start.step=0;
25 r.push(start);
26 v[startx][starty]=true;
27 int flag=0;
28 while(!r.empty()
29 {
30 int x=r.front().x;
31 int y=r.front().y;
32 if(x==p &&y==q)
33 {
34 printf("%d",r.front().step);
35 ②;
36 break;
37 }
38 for(int k=0;③;k++)
39 {
40 int tx,ty;
41 tx=x+dx[k];
42 ty=y+dy[k];
43 if(a[tx][ty]==false&&v[tx][ty]==false)
44 {
45 point temp;
46 temp.x=tx;
47 temp.y=ty;
48 temp.step=④;
49 r.push(temp);
50 ⑤=true;
51 }
52 }
53 r.pop()
54 }
55 if(flag == 0)
56 printf("no answer");
57 return 0;
58 }
- ①处应填() {{ select(35) }}
- a[j+100][k+100]
- a[j][k]
- a[j+100][k]
- a[j][k+100]
- ②处应填() {{ select(36) }}
- fag=0
- fag=1
- v[tx][ty]=true
- v[tx][ty]=false
- ③处应填() {{ select(37) }}
- k<=3
- k<=4
- k<=n
- k<=r.front().step
- ④处应填() {{ select(38) }}
- start.step
- start.step+1
- r.front().step+1
- r.front().step
- ⑤处应填() {{ select(39) }}
- a[tx+1][ty+1]
- v[tx+1][ty+1]
- a[tx][ty]
- v[tx][ty]
- 在大规模数据处理中,经常需要处理 Top N问题:在乱序数据中找到前N 个数据。例如在海量搜索结果中找到权重最高的前N 个结果。如下代码是一 个经典的堆排序过程,请补充完整全部程序。
1 #include <cstdio>
2 #include <algorithm>
3 using namespace std;
4 void heap_handle(int *a,int index,int num)
5{
6 int left=2*index;
7 int right=2*index+1;
8 int maxroot=index;
9 if(index<=num/2)
10 {
11 if(①)
12 {
13 maxroot=left;
14 }
15 if(②)
16 {
17 maxroot=right;
18 }
19 if(③)
20 {
21 swap(a[index],a[maxroot]);
22 ④;
23 }
24 }
25 }
26 void build_heap(int *a,int num)
27 {
28 for(inti=num/2;i>=1;--i)
29 {
30 heap_handle(a,i,num);
31 }
32 }
33 void heap_sort(int*a,int num)
34 {
35 int i;
36 build_heap(a,num);
37 for(i=num;i>=1;--i)
38 {
39 swap(a[1],a[i]);
40 ⑤;
41 }
42 }
43 void display(int*a,int num)
44 {
45 for(inti=1;i<=num;++i)
46 {
47 printf("%d",a[i]);
48 }
49 printf("\n");
50 }
51 int main()
52 {
53 int n;
54 scanf("%d",&n);
55 inta[n+1];
56 for(inti=1;i<=n;i++)
57 {
58 scanf("%d",a+i);
59 }
60
61 heap_sort(a,n);
62 display(a,n);
63 return 0;
64 }
- ①处应填() {{ select(40) }}
- left>num &&a[left]>a[maxroot]
- left<=num &&a[left]>a[maxroot]
- right>num &&a[right]>a[maxroot]
- right<=num &&a[right]>a[maxroot]
- ②处应填() {{ select(41) }}
- left>num && a[left]>a[maxroot]
- left<=num && a[left]>a[maxroot]
- right>num && a[right]>a[maxroot]
- right<=num && a[right]>a[maxroot]
- ③处应填() {{ select(42) }}
- maxroot
- maxroot!=index
- maxroot%2
- maxroot<=num
- ④处应填() {{ select(43) }}
- heap_handle(a,index,num)
- heap_handle(a,maxroot,num)
- heap_handle(a,maxroot-1,num)
- heap_handle(a,maxroot,num/2)
- ⑤处应填() {{ select(44) }}
- heap_handle(a,1,i)
- heap_handle(a,1,i+1)
- heap_handle(a,1,i-1)
- heap_handle(a,1,num)