#C. CSP-J 初赛模拟赛4

    Type: Objective

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
  1. 十进制数 28 与二进制数 10000001110000 求和的结果是( ) {{ select(2) }}
  • A.十进制数 8332
  • B.十六进制数 208A
  • C.二进制数 100000000110
  • D.八进制数 20212
  1. C++程序中,(25|6)^5的值是( )。{{ select(3) }}
  • A.25
  • B.26
  • C.27
  • D.28
  1. 在数组 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.O(logn)O(logn)
  • B.O(n)O(n)
  • C.O(n2)O(n^2)
  • D.O(nlogn)O(nlogn)
  1. 将数组 {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
  1. 下述选项中哪个不是算法描述的通用方法?( ) {{ select(11) }}
  • A.自然语言
  • B.流程图
  • C.人工智能
  • D.伪代码
  1. 若A=True,B=False,C=True,D=False,以下逻辑运算表达式的运算结果为真的是( )。 {{ select(12) }}
  • A. (AB)(CD¬A)(A \wedge B) \vee (C \wedge D \vee \neg A)
  • B. ((AB)C)¬B((A \wedge B) \wedge C) \wedge \neg B
  • C. (BCD)DA(B \vee C \vee D) \vee D \wedge A
  • D. (A(D¬C)B(A \wedge (D \vee \neg C) \wedge B
  1. 一棵二叉树的高度为h,所有结点的度数都为0或2,则此树最少有( )个结点。 {{ select(13) }}
  • A. 2h12^h-1
  • B. 2h12h-1
  • C. 2h+12h+1
  • D. h+1h+1
  1. 从 12 个人中选出 5 个人,其中甲、乙、丙必选的方法共有( )种。 {{ select(14) }}
  • A. 60
  • B. 36
  • C. 72
  • D. 120

15.在一个有向图中,所有顶点的入度之和等于所有顶点的出度之和的( )倍。 {{ select(15) }}

  • A. 12\dfrac{1}{2}
  • B. 22
  • C. 11
  • D. 44

二、阅读程序(程序输入不超过数组或字符串定义的范围:判断题正确填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;
}

判断题

  1. 如果 n 输入一个负整数,程序的运行会出错。() {{ select(22) }}
  • true
  • false
  1. 如果 n 输入一个正整数,m 输入一个负整数,那么程序会进入死循环,不会输出经任何结果。() {{ select(23) }}
  • true
  • false
  1. 若输入 4 4,则程序的运行结果为 1。() {{ select(24) }}
  • true
  • false
  1. 若输入4 -1,则程序的运行结果为 0。() {{ select(25) }}
  • true
  • false

选择题

  1. 若输入为 7 4 ,则输出为( )。 {{ select(26) }}
  • A. 20
  • B. 10
  • C. 15
  • D. 5
  1. 若输出为 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;
}

判断题

  1. 本段程序的算法用到了二分算法的思想。{{ select(28) }}
  • true
  • false
  1. 将第3行中的 const 去掉,程序的运行结果不变。 {{ select(29) }}
  • true
  • false
  1. 将第14行中的 left<n 去掉,程序的运行结果不变。 {{ select(30) }}
  • true
  • false
  1. 将第38行中的 long long 替换为 int ,程序的运行结果不变。 {{ select(31) }}
  • true
  • false

选择题

  1. 第8行的写法在某些时候会导致程序运行有问题,最好换成写法( )。 {{ select(32) }}
  • A. mid = (left + right) << 1
  • B. mid = left + (right - left) / 2
  • C. mid = (left + right) >> 1
  • D. mid = (left + right) % 2
  1. 本程序的时间复杂度为( )。 {{ select(33) }}
  • A. O(logn)O(logn)
  • B. O(n)O(n)
  • C. O(nm)O(nm)
  • D. O(nlogn)O(nlogn)

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]
  1. ③处应填( )。 {{ select(37) }}
  • A.break
  • B.continue
  • C.return 0
  • D.exit
  1. 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 就是采用快速排序 思想实现的。如下代码是一个经典的快速排序过程,输入一个整数 nn,然后输入 nn 个整数,程序会按照从小到大的顺序将所有整数进行排序并输出。请将程序补充完整。

#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)
  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

Not Attended
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