#B. CSP-J 初赛模拟卷3

    Type: Objective

CSP-J 初赛模拟卷3

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. 下列存储器按存取速度由快至慢排列,正确的是( )。 {{ select(1) }}
  • A.硬盘 > 内存 > 高速缓存 >U盘
  • B.高速缓存 > 内存 > 硬盘 >U 盘
  • C.高速缓存 > 硬盘 > 内存>U盘
  • D.U盘 > 硬盘 > 内存 > 高速缓存
  1. 杨辉三角形和( )算法的思想最接近。 {{ select(2) }}
  • A.贪心
  • B.二分
  • C.DFS
  • D.递推
  1. 下列属于输入设备的是() {{ select(3) }}
  • A.显示器
  • B.麦克风
  • C.音箱
  • D.打印机
  1. 小写字母a的ASCII码值为97,小写字母z的ASCII码值是() {{ select(4) }}
  • A.120
  • B.119
  • C.122
  • D.121
  1. IP地址是每台上网的计算机所必需的,下列IP地址中可以作为合法主机址的是( )。 {{ select(5) }}
  • A.225.225.225.225
  • B.200.256.192.8
  • C.192.168.1.12
  • D.0.0.0.0
  1. 下面哪个可以用作C++程序中的标识符?() {{ select(6) }}
  • A.default
  • B.private
  • C.this
  • D.them
  1. 快速排序在最坏情况下运行的时间复杂度是()。 {{ select(7) }}
  • A. O(logn)
  • B. O(n)
  • C. O(nm)
  • D. O(nlogn)
  1. 字符串 a="98",字符串 b="123”,使用 strcmp 函数,比较两者大小的结果是 ( )。 {{ select(8) }}
  • A.a大
  • B.b大
  • C.一样大
  • D.无法判断
  1. 关于计算机网络,下面的说法哪个是正确的?() {{ select(9) }}
  • A.现在的计算机互联网是俄罗斯人发明的
  • B.计算机网络拓扑结构只包括星形、流水线型和环形
  • C. TCP/IP是因特网的最基本的协议
  • D.SMTP属于物理层协议
  1. 关于信息安全与网络道德,下列做法正确的是( )。 {{ select(10) }}
  • A.确认环境安全后再输入支付密码
  • B.随意点击不熟悉的电子邮件中的链接
  • C.未经许可将其他人的私密照片和视频上传到互联网上
  • D.在微信里随意转发未经证实的信息
  1. 现在有一个十进制算式13*64+7,它等于二进制数的() {{ select(11) }}
  • A.1100100111 .
  • B.1101001111
  • C.1101000111
  • D.1111101101
  1. 逻辑表达式A=true,B=C=D=false,则逻辑表达式取值为真的是() {{ select(12) }}
  • A. (AB)(CD¬A)(A \wedge B) \vee (C \wedge D \vee \neg A)
  • B. ¬((ABC)D) \neg ((A \wedge B \vee C) \wedge D)
  • C. A(BCD)DA \wedge (B \vee C \vee D) \vee D
  • D. (A(CD))B(A \vee (C \vee D)) \wedge B
  1. 某二叉树树根层次为0,则有64个结点的完全二叉树的高度是() {{ select(13) }}
  • A.9
  • B.8
  • C.7
  • D.6
  1. 书架上同一格放5本书,A和B必须相邻.C和D必须不相邻,不同的放法共有 ( ) 种。 {{ select(14) }}
  • A.24
  • B.12
  • C.18
  • D.48
  1. 字符串S="abcdefgh"的子串个数为() {{ select(15) }}
  • A.33
  • B.35 。
  • C.37
  • D.36

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

(1)

#include<bits/stdc++.h>
using namespace std;
const int SIZE = 100007;
int a[SIZE], b[SIZE];
int main()
{
	int n, m, P, q, count=0, ret=0;	//第7行
	cin >> n >> m;
	for (int i = 1; i <= n; i++)
	{
		cin >> p>> q;
		a[p]++;
		a[q+1]--;
	}
	for(int i = 1; i <= m; i++)	//第15行
	{
		count += a[i];		//第17行
		ret += count;		//第18行
	}
	cout << ret;
	return 0;
}

注:输入流中 1pq<m1 \le p \le q < m

判断题

  1. 将输入的 p 和 q 改成任意的整数,运行程序都不会出错。 () {{ select(16) }}
  • true
  • false
  1. 将第7行中的 count=0 去掉,只定义 count 变量,程序的运行结果不会改变。( ) {{ select(17) }}
  • true
  • false
  1. 将第17行和第18行互换位置,程序的运行结果不会发生变化。 ( ) {{ select(18) }}
  • true
  • false
  1. 将第15行中的i=1改为i=0,程序的运行结果不会改变。 () {{ select(19) }}
  • true
  • false

选择题

  1. 将第12~13行中的 p 和 q+1 分别改为 p-1 和 q ,则输出结果() {{ select(20) }}
  • A.变大
  • B.变小
  • C.不变
  • D.都有可能
  1. 若输入为 4 4 1 2 2 3 3 3 1 3,则输出为( )。. {{ select(21) }}
  • A.6
  • B.10
  • C.7
  • D.8

(2)

#include <bits/stdc++.h>
using namespace std;
bool fun(int n)
{
	int i=7;
	if(n==2 || n==3 || n==5)
		return true;
	if(n==1 || n%2==0 || n%3==0 || n%5==0)
		return false;
	while(i*i<=n)
	{
		if(n%i==0)
			return false;
		i += 4;
		if(n%i==0)
			return false;
		i+=2;
	}
	
	return true;
}


int main()
{
	int n, m;
	cin >> n >> m;
	if(fun(n) && fun(m) && fun(n+m+1))
		cout<<"YES"<<endl;
	else
		cout<<"NO"<<endl;
	return 0;		
}

判断题

  1. 程序中n和m只有输入正整数,程序的输出值才可能是YES。() {{ select(22) }}
  • true
  • false
  1. 程序中用到了递归函数bool fun(int n)。() {{ select(23) }}
  • true
  • false
  1. 若输入n和m都是素数,程序的输出值一定是YES。() {{ select(24) }}
  • true
  • false
  1. 若输入n和m的值分别是 -12027 ,则程序的输出值是YES。() {{ select(25) }}
  • true
  • false

选择题

  1. 若输出YES,则输入可能为( )。 {{ select(26) }}
  • A.23 29
  • B.23 24
  • C.23 27
  • D.31 37

27.若输出 NO,则输入可能为( )。 {{ select(27) }}

  • A.53 127
  • B.2029 -1
  • C.2023 2027
  • D.97 41

(3)

#include<bits/stdc++.h>
using namespace std;
int main()
{
	stack<int> s;
	char a[1005];
	int back,front,result;
	cout <<"Input:";
	cin >> a;
	for (int i = 0;i < strlen(a); i++)
	{
		if (a[i] >= '0' && a[i] <='9')
			s.push(a[i] -'0');
		else
		{
			back = s.top();
			s.pop();
			front = s.top();
			s.pop();
			
			if (a[i]=='+')
				result = front + back;
			else if(a[i] =='-')
				result = front - back;
			else if (a[i] =='*')
				result = front * back;
			else if(a[i]=='/')
				result = front / back;
			else if(a[i]=='%')
				result = front % back;
			s.push(result);
		}
	}
	cout << "Output:"<< s.top() << endl;
	return 0;
}

判断题

  1. 将第1行改为#include<iostream>,程序的运行结果不变。() {{ select(28) }}
  • true
  • false
  1. 本程序用到了队列而不是栈的思想。() {{ select(29) }}
  • true
  • false
  1. 将第12行中的'0'替换为48,程序的运行结果不会改变。() {{ select(30) }}
  • true
  • false
  1. 如果输入的都是非零数字和加、减、乘、除四则运算符号,那么运行程序输出的值一定是正整数。 ( ) {{ select(31) }}
  • true
  • false

选择题

  1. 本题的主要思想是求( )表达式的值。 {{ select(32) }}
  • A.前缀
  • B.后缀
  • C.中缀
  • D.逻辑
  1. 若输入234--,那么程序的输出结果是( ) {{ select(33) }}
  • A.3。
  • B.2
  • C.1
  • D.0

34.(4分)若输入数据为5432*%/,则输出是()。 {{ select(34) }}

  • A.3
  • B.2
  • C.10
  • D.0

三、完善程序(单选题,每小题3分,共计30分)

(1) 输入两个正整数 nnmm (1<n<101<m<n)(1<n<10,1<m<n),在 1n1 \sim n 这几个数中任取 mm 个数、按字典序从小到大输所有这样的排列。

输入格式:

输出格式: 第1行输入n和m。

输出从n个数中挑出m个数组成的所有排列,按从小到大的顺序输出。

输入样例:

43

输出样例:

123
124
132
134
142
143
213
214
231
234
241
243
312
314
321
324
341
342
412
413
421
423
431
432
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 15;
bool flag, vis[MAXN];
int nm,i.j,k,a[MAXN];
int main()
{
	cin>>n>>m;
	memset(vis,false,sizeof(vis));
	for(i=1;i<=m;i++)
	{
		a[i]=i;
		vis[i]=true;
	}
	flag=true;
	while(flag)
	{
		for(1=1;i<=m-1;i++)
			cout << a[i]<" ";
		cout << a[m]<<endl;
		①;
		for(i=m;i>=1;i--)
		{
			
		}
	
		②;
		for(j=a[i]+1;j<=n;j++)
		{
			if(tvis[j])
			{
				vis[j]=true;
				③;
				flag=true;
				break;
			}
		}
		
		if(flag)
		{
			
		}
		
		for(k=i+1;k<=m;k++)
		{
			for(j=1;④;j++)
			{
				if(!vis[j])
				{
					a[k]=j;
					fvis[j]=true;
					break;
				}
			}
		}
		⑤;
	}
	return 0;
}

35.①处应填() {{ select(35) }}

  • A.flag = false
  • B.flag = true
  • C.vis[1]= false
  • D.vis[1]= true
  1. ②处应填( )。 {{ select(36) }}
  • A.vis[i]= true
  • B.a[i]= i
  • C.vis[a[i]]= true
  • D.vis[a[i]]= false

37.③处应填() {{ select(37) }}

  • A.a[i]=i
  • B.a[i]=j
  • C.a[i] = true
  • D.a[i] = false
  1. 4处应填( ) {{ select(38) }}
  • A.j<=m
  • B.j<=k
  • C.j<=n
  • D.j<=i

39.⑤处应填( )。 {{ select(39) }}

  • A.exit
  • B.return 0
  • C.continue
  • D.break

(2) 求一个有向图中有多少个环并输出环的总数。

输入格式:

第1行为n,第2行为n个点的编号。

输出格式:

输出有向图的环的总数。

输入样例:

10
7 1 4 3 2 5 9 8 0 6

输出样例:

6

样例说明:

a 0]=7, a[7]=8, a[8]=0, {0,7,8)构成一个环;a[1]=1,{1}构成一个环;a[2]=4,a[4]=2, {2,4}构成一个环;a[3]=3, {3}构成一个环;a[5]=5, {5} 构成一个环;a[6]=9,a[9]=6, {6,9} 构成一个环。该有向图共有 6 个环。

#includecbits/stdc++.h>
using namespace std;
int n,point[100];
bool vis[100];
int main()
{
	int cnt;
	scanf("%d",Sn);
	for (int i = 0; i < n; ++i)
	{
		scanf("%d",①);
		②; 
	}
	cnt = 0;
	for (int i = 0; 1< n;++1)
	if (③)
	{
		for (int j=i; !vis[j]; ④)
		{
			vis[j] = true;
		}
		⑤;
	}
	
	
	printf("%d", cnt);
	return 0;
}

40.①处应填( )。 {{ select(40) }}

  • A.&point
  • B.point + i
  • C.&point + i
  • D.point[i]

41.②处应填( )。 {{ select(41) }}

  • A.vis[j]=false
  • B.vis[j] = true
  • C.vis[i]= true
  • D.vis[i]= false

42.③处应填( )。 {{ select(42) }}

  • A.!vis[i]
  • B.vis[i]
  • C.!vis[point[i]]
  • D.vis[point[i]]

43.④处应填() {{ select(43) }}

  • A.j =point[i]
  • B.j = point[j]
  • C.i=point[j]
  • D.i = point[i]

44.⑤处应填() {{ select(44) }}

  • A.cnt=j+1
  • B.cnt=n-j
  • C.++cnt
  • D.cnt = n-i

初赛模拟卷C

Not Attended
Status
Done
Rule
OI
Problem
2
Start at
2024-8-15 16:15
End at
2024-8-16 13:45
Duration
2 hour(s)
Host
Partic.
39