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)
  • B.O(n)
  • C.O(n')
  • D.O(nlogn)
  1. 将数组(9.33.5.18.71.3.52.851中的元素按从大到小的顺序排列,每次可以交换任意两个元素,最少需要交换( )次 {{ 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.伪代码

12.若A=True,B=False,C=True,D=False,以下逻辑运算表达式的运算结果为真的是( )。 {{ select(12) }}

  • A.(AAB)V(CADV-A)
  • B.((AAB)AC)A-B
  • C.(BVCVD)VDAA
  • D.(AA(DV-C)AB

13.一棵二叉树的高度为h,所有结点的度数都为0或2,则此树最少有( )个结点。 {{ select(13) }}

  • A.2'-1
  • B.2h-1
  • C.2h+1
  • D.h+1

14.从12个人中选出5个人,其中甲、乙、丙必选的方法共有( )种。 {{ select(14) }}

  • A.60
  • B.36
  • C.72
  • D.120

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

  • A.1/2
  • B.2
  • C.1
  • D.4

二、阅读程序(程序输入不超过数组或字符串定义的范围:判断题正确填V,错误填x:除特殊说明外,判断题每题1.5分,选择题每题3分,共计40分)

(1)

#includecbits/stdc++.h>
using namespace std;
char change(char str)
{
	if(str >='a' 8& str <='z')
		str -= 32;
	return str;
}

int main()
{
	string S1, s2;
	cin >> S1 >> s2;
	int cnt = 0;
	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行头文件改为#includeciostream>,程序的运行结果不会改变。 ( ) {{ 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

23.如果n输入一个正整数,m输入一个负整数,那么程序会进入死循环,不会输出经任何结果。() {{ select(23) }}

  • true
  • false

24.若输入44,则程序的运行结果为1。() {{ select(24) }}

  • true
  • false
  1. 若输入4-1,则程序的运行结果为0。() {{ select(25) }}
  • true
  • false

选择题

26.若输入为7 4,则输出为( )。 {{ select(26) }}

  • A.20
  • B.10
  • C.15
  • D.5

27.若输出为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;
int nums[MAXN];
int left_bound(int n, int target)
{
	int left - 0. rightsn-1i
	while (left <= right)
	{
		int mid s (left + right) / 2;
		if(nums[mid] < target) left =mid + 1;
		else right -mid-1;
	}
	
	if(left < n && nums[left] && target)
		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 66 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;
	for(int i = 0; i< n; ++i)
	{
		int left s 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;
}

判断题

28.本段程序的算法用到了二分算法的思想。{{ select(28) }}

  • true
  • false

29.将第3行中的const去掉,程序的运行结果不变。 {{ select(29) }}

  • true
  • false

30.将第14行中的left<n去掉,程序的运行结果不变。 {{ select(30) }}

  • true
  • false

31.将第38行中的long long替换为int,程序的运行结果不变。 {{ select(31) }}

  • true
  • false

选择题

32.第8行的写法在某些时候会导致程序运行有问题,最好换成写法( )。 {{ select(32) }}

  • A.mid = (left + right)<< 1
  • B.mid = left +(right - left)/2
  • C.mid = (left + right)>> 1
  • D.mid = (left + right)%2

33.本程序的时间复杂度为( )。 {{ select(33) }}

  • A.O(logn)
  • B.O(n)
  • C.O(nm)
  • D.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的孩子结点。 输入样例: 87 41 42 13 15 26 27 28 输出样例: 42 678

#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;jc=n;j++)
			if(tree[j]==i)
				sum++;
		if(④)
			Max=sum;maxroot=i;
	}
	cout<<root<kendl<<maxroot<<endl;
	for(i=1;ic=n;i++)
		if(5)
			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 就是采用快速排序 思想实现的。如下代码是一个经典的快速排序过程,输入一个整数n,然后输入 个整数,程序会按照从小到大的顺序将所有整数进行排序并输出。请将程序补充 完整。

#includecbits/stdc++.h>
using namespace std;
int a[1005];
void quickSort(int al], int begin, int end)
{
	int i,j,tmp;
	if(begin >= end)
		return;
	①;
	i = begin;
	j = end;
	while(i< j)
	{
		while(alj] > tmp)
			j--;
		while(②)
			i++;
		if(il= 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.1处应填() {{ 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. 5处应填( )。 {{ select(44) }}
  • A.quickSort(a,1,n-1)
  • B.quickSort(a,0,n-1)
  • C.quickSort(a,1,n)
  • D.quickSort(a,0,n)

[2024笔试] CSP - J考前刷题

Not Attended
Status
Done
Rule
OI
Problem
10
Start at
2024-8-12 4:30
End at
2024-8-12 5:30
Duration
1 hour(s)
Host
Partic.
2