CSP-J 初赛模拟赛4
You cannot submit for this problem because the contest is ended. You can click "Open in Problem Set" to view this problem in normal mode.
一、单项选择题(共15题,每题2分,共计30分;每题有且仅有一个正确选项)
1.正整数 2024 与 1840 的最大公约数是( )。 {{ select(1) }}
- A.46
- B.92
- C.44
- D.184
- 十进制数 28 与二进制数 10000001110000 求和的结果是( ) {{ select(2) }}
- A.十进制数 8332
- B.十六进制数 208A
- C.二进制数 100000000110
- D.八进制数 20212
- C++程序中,
(25|6)^5
的值是( )。{{ select(3) }}
- A.25
- B.26
- C.27
- D.28
- 在数组 A[x] 中,若存在(i<j) 且 (A[i] > A[j]),则称 (A[i],A[j]) 为数组A[x]的一个逆序对。对于序列
(7,4.1,9,3,6,8,5)
,在不改变顺序的情况下,去掉( )会使逆序对的个数减少 4 。{{ select(4) }}
- A.1
- B.3
- C.6
- D.5
5.如果字符串 s 在字符串 A 中出现了,则字符串 s 被称作字符串 A 的子串。设字符串A ="players",A的非空子串的数目是( ) {{ select(5) }}
- A.27
- B.29
- C.28
- D.30
6.以下哪种算法的主要框架不是非比较排序?(). {{ select(6) }}
- A.计数排序
- B.堆排序
- C.基数排序
- D.桶排序
7.采用了倍增法的程序运行的时间复杂度是( ) {{ select(7) }}
- A.
- B.
- C.
- D.
- 将数组 {9.33.5.18.71.3.52.85} 中的元素按从大到小的顺序排列,每次可以交换任意两个元素,最少需要交换( )次 {{ select(8) }}
- A.4
- B.5
- C.6
- D.7
9.关于计算机网络,下面的说法中哪个是正确的?() {{ select(9) }}
- A.计算机网络是一个管理信息系统
- B.计算机网络是一个管理数据系统
- C.计算机网络是一个在协议控制下的多机互联系统
- D.计算机网络是一个独立的操作系统
10.下列哪款软件不是操作系统软件的名字?() {{ select(10) }}
- A.安卓
- B.Windows 11
- C.华为鸿蒙
- D.ChatGPT
- 下述选项中哪个不是算法描述的通用方法?( ) {{ select(11) }}
- A.自然语言
- B.流程图
- C.人工智能
- D.伪代码
- 若A=True,B=False,C=True,D=False,以下逻辑运算表达式的运算结果为真的是( )。 {{ select(12) }}
- A.
- B.
- C.
- D.
- 一棵二叉树的高度为h,所有结点的度数都为0或2,则此树最少有( )个结点。 {{ select(13) }}
- A.
- B.
- C.
- D.
- 从 12 个人中选出 5 个人,其中甲、乙、丙必选的方法共有( )种。 {{ select(14) }}
- A. 60
- B. 36
- C. 72
- D. 120
15.在一个有向图中,所有顶点的入度之和等于所有顶点的出度之和的( )倍。 {{ select(15) }}
- A.
- B.
- C.
- D.
二、阅读程序(程序输入不超过数组或字符串定义的范围:判断题正确填V,错误填x:除特殊说明外,判断题每题1.5分,选择题每题3分,共计40分)
(1)
#include <bits/stdc++.h> //第1行
using namespace std;
char change(char str)
{
if(str >='a' 8& str <='z') //第5行
str -= 32; //第32行
return str;
}
int main()
{
string S1, s2;
cin >> S1 >> s2;
int cnt = 0; //第14行
for (int i = 0; i< s1.size(); i++)
{
for(int j= 0; j< s2.size(); j++)
if (change(s1[i]) == change(s2[j]))
cnt++;
}
cout << cnt;
return 0;
}
判断题
16.将第1行头文件改为#include<iostream>
,程序的运行结果不会改变。 ( ) {{ select(16) }}
- true
- false
17.将第5行中的'a'
替换为97
,程序的运行结果不会改变。 ( ) {{ select(17) }}
- true
- false
18.将第6行中的 32
替换为 ' '
,程序的运行结果不会改变。 ( ) {{ select(18) }}
- true
- false
19.将第 14 行代码去掉,程序的运行结果不会改变。 () {{ select(19) }}
- true
- false
选择题
20.若输入数据为ABCDE AbCdE
,则输出为( )。 {{ select(20) }}
- A.3
- B.5
- C.2
- D.0
21.若输入数据为WorldYiwuAsiaShanghai ChinaHangzhouZhejiangJinhua
,则输
出为( )。 {{ select(21) }}
- A.36
- B.40
- C.42
- D.44
(2)
#include<iostream>
using namespace std;
int solve(int n,int m)
{
int i,sum;
if(m==1)
return 1;
sum=0;
for(i=1;i<n;i++)
sum += solve(i,m-1);
return sum;
}
int main()
{
int n,m;
cin>>n>>m;
cout<<solve(n,m)<<endl;
return 0;
}
判断题
- 如果
n
输入一个负整数,程序的运行会出错。() {{ select(22) }}
- true
- false
- 如果
n
输入一个正整数,m
输入一个负整数,那么程序会进入死循环,不会输出经任何结果。() {{ select(23) }}
- true
- false
- 若输入
4 4
,则程序的运行结果为1
。() {{ select(24) }}
- true
- false
- 若输入
4 -1
,则程序的运行结果为0
。() {{ select(25) }}
- true
- false
选择题
- 若输入为
7 4
,则输出为( )。 {{ select(26) }}
- A.
20
- B.
10
- C.
15
- D.
5
- 若输出为
10
,则输入可能为( )。 {{ select(27) }}
- A.
5 3
- B.
5 4
- C.
6 4
- D.
6 5
(3)
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 2e5 + 5; //第3行
int nums[MAXN];
int left_bound(int n, int target)
{
int left - 0. right = n-1;
while (left <= right)
{
int mid = (left + right) / 2;
if(nums[mid] < target)
left = mid + 1;
else
right = mid-1;
}
if(left < n && nums[left] == target) //第14行
return Left;
return -1;
}
int right_bound(int n, int target)
{
int left = 0, right = n - 1;
while (left <= right)
{
int mid = (left + right)/ 2;
if(nums[mid] <= target)
left = mid + 1;
else
right = mid-1;
}
if(right >= 0 && nums[right] == target)
return right;
return -1;
}
int main()
{
int n, c;
cin>>n>>c;
for(int i = 0; ic n; ++i)
cin >> nums[i];
sort(nums, nums + n);
long long ans = 0; //第38行
for(int i = 0; i< n; ++i)
{
int left = left_bound(n, nums[i] +c);
int right = right_bound(n, nums[i] + c);
if(left != -1)
ans += right - left + 1;
}
cout<<ans<<endl;
return 0;
}
判断题
- 本段程序的算法用到了二分算法的思想。{{ select(28) }}
- true
- false
- 将第3行中的
const
去掉,程序的运行结果不变。 {{ select(29) }}
- true
- false
- 将第14行中的
left<n
去掉,程序的运行结果不变。 {{ select(30) }}
- true
- false
- 将第38行中的
long long
替换为int
,程序的运行结果不变。 {{ select(31) }}
- true
- false
选择题
- 第8行的写法在某些时候会导致程序运行有问题,最好换成写法( )。 {{ select(32) }}
- A.
mid = (left + right) << 1
- B.
mid = left + (right - left) / 2
- C.
mid = (left + right) >> 1
- D.
mid = (left + right) % 2
- 本程序的时间复杂度为( )。 {{ select(33) }}
- A.
- B.
- C.
- D.
34.(4分)当输入
4 1
112 3
时,程序的输出结果为( )。 {{ select(34) }}
- A. 1
- B. 2
- C. 3
- D. 4
三、完善程序(单选题,每小题3分,共计30分)
(1) 给定一棵树,输出树的根 root 、孩子结点最多的结点 max 以及它的孩子结点。
输入格式:
第1行输入n(结点数 100)和m(边数<200)。以下m行输入每行两个结点x和y,表示y是x的孩子结点(xy 1000)。
输出格式:
第1行是树根root。第2行是孩子结点最多的结点max。第3行是max的孩子结点。
输入样例:
8 7
4 1
4 2
1 3
1 5
2 6
2 7
2 8
输出样例:
4
2
6 7 8
#include<iostream>
using namespace std;
int n,m,tree[105]= {0};
int main()
{
int i,x,y,root,maxroot,sum=0,j,Max=0;
cin >> n >> m;
for(i=1; i<=m; i++)
{
cin>>x>>y;
①;
}
for(i=1;i<=n;i++) //找出树的根
if(②)
{
root=i;
③;
}
for(i=1;ic=n;i++) //找孩子结点最多的结点
{
sum=0;
for(j=1; j<=n; j++)
if(tree[j]==i)
sum++;
if(④)
{
Max=sum;
maxroot=i;
}
}
cout << root << endl << maxroot << endl;
for(i=1; i<=n; i++)
if(⑤)
cout<<i<<"";
return 0;
}
35.①处应填()。 {{ select(35) }}
- A.
tree[y]=x
- B.
tree[x]=y
- C.
tree[y]= i
- D.
tree[x]= i
36.②处应填()。 {{ select(36) }}
- A.
tree[i]==1
- B.
tree[i] == 0
- C.
tree[i] == 2
- D.
tree[i]
- ③处应填( )。 {{ select(37) }}
- A.
break
- B.
continue
- C.
return 0
- D.
exit
- 4处应填( )。 {{ select(38) }}
- A.
sum == Max
- B.
sum <= Max
- C.
sum > Max
- D.
sum < Max
39.⑤处应填() {{ select(39) }}
- A.
tree[i] != maxroot
- B.
tree[i] <= maxroot
- C.
tree[i] >= maxroot
- D.
tree[i] == maxroot
(2) 快速排序是一种高效的排序算法,我们常用的 STL 函数 sort 就是采用快速排序 思想实现的。如下代码是一个经典的快速排序过程,输入一个整数 ,然后输入 个整数,程序会按照从小到大的顺序将所有整数进行排序并输出。请将程序补充完整。
#includecbits/stdc++.h>
using namespace std;
int a[1005];
void quickSort(int a[], int begin, int end)
{
int i,j,tmp;
if(begin >= end)
return;
①;
i = begin;
j = end;
while(i < j)
{
while(a[j] > tmp)
j--;
while(②)
i++;
if(i != j)
swap(a[i], alj]);
}
③;
④;
quickSort(a,i+1,end);
}
int main()
{
int n;
cin>>n;
for(int i=1;ic=n;i++)
cin>>a[i];
⑤
for(int i=l;ic=n;i++)
cout<<a[i]<<" ";
return 0;
}
40.①处应填() {{ select(40) }}
- A.
tmp = a[begin]
- B.
tmp = a[i]
- C
.tmp =a[j]
- D.
tmp = a[end]
41.②处应填( )。 {{ select(41) }}
- A.
a(i) >= tmp && i < j
- B.
a[i] >= tmp && i > j
- C.
a[i] <= tmp && i > j
- D.
a[i] <= tmp && i < j
42.③处应填( )。 {{ select(42) }}
- A.
swap(a[i],alj])
- B.
swap(a[begin],a[i])
- C.
swap(a[begin],a[j])
- D.
swap(a[begin],a[end])
43.④处应填( )。 {{ select(43) }}
- A.
quickSort(a,begin,i)
- B.
quicksort(a,begin,i-1)
- C.
quickSort(a,1,i)
- D.
quickSort(a,1,i-1)
- ⑤处应填( )。 {{ select(44) }}
- A.
quickSort(a,1,n-1)
- B.
quickSort(a,0,n-1)
- C.
quickSort(a,1,n)
- D.
quickSort(a,0,n)
初赛模拟卷D
- Status
- Done
- Rule
- OI
- Problem
- 3
- Start at
- 2024-8-16 16:15
- End at
- 2024-8-18 13:45
- Duration
- 2 hour(s)
- Host
- Partic.
- 27