#F. CSP-J 初赛模拟卷2

    Type: Objective

CSP-J 初赛模拟卷2

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. 在C++程序中用到的一个常量 a=5e-6 在内存中占( )空间。 {{ select(1) }}
  • A.2字节
  • B.1字节
  • C.4字节
  • D.8字节
  1. 以下关于CSP与NOIP的描述正确的是( )。 {{ select(2) }}
  • A.CSP属于专业认证,只有计算机专业在校生才能参加
  • B.CSP-J/CSP-S是中国通信学会举办的程序设计竞赛
  • C.CSP-J初赛零分也可以直接报名参加NOIP
  • D.CSP-J和CSP-S都是CCF牵头举办的程序设计赛事
  1. 某单位安装一条电信宽带进行上网,运营商说下行速度是500Mbps。要下载大小为10GB的软件,最快大约需要( )秒。 {{ select(3) }}
  • A.2
  • B.20
  • C.200
  • D.2000
  1. 大写字母M的ASCII码整数值和空格的ASCII码整数值之和,是字母m的ASCII码整数值。空格的ASCII码整数值是( )。 {{ select(4) }}
  • A.32
  • B.31
  • C.30
  • D.29

5.在微型计算机中,( )的存取速度最快。 {{ select(5) }}

  • A. RAM
  • B. CD-ROM
  • C. 高速缓存
  • D. 寄存器

6.搜索算法中的DFS算法经常用到的数据结构是( )。 {{ select(6) }}

  • A.堆
  • B.栈
  • C.链表
  • D.队列
  1. 以下哪个说法是正确的?() {{ select(7) }}
  • A.花括号“{”和“}”只能作为C++函数体的定界符
  • B.构成C++程序的基本单位是函数,所有函数名都可以由用户命名
  • C.分号是C++语句之间的分隔符,不是语句的一部分
  • D.C++程序中的注释部分可以出现在程序中任意合适的地方
  1. 在下列排序算法中,STL中的sort()函数采用的主要算法是( )。 {{ select(8) }}
  • A.选择排序
  • B.快速排序
  • C.冒泡排序
  • D.拓扑排序
  1. 以下哪个说法是正确的?() {{ select(9) }}
  • A.第一台电子计算机ENIAC是基于集成电路的产物
  • B.计算机必须要同时有IP地址和域名才能接入互联网
  • C.david@163.com是一个正确的电子邮箱地址
  • D.手机上收到的短信,里面的链接可以随意点击打开
  1. 以下不能对二维数组a进行正确初始化的语句是()。 {{ select(10) }}
  • A. int a[2][3]= {{1, 2}, {3, 4}, {5, 6}};
  • B. int a[][3]= {{1, 2}, {0}};
  • C. int a[2][3]= {0};
  • D. int a[][3]= {1, 2, 3, 4, 5, 6};
  1. 现在有一个八进制数274,其转换成的二进制数是( )。 {{ select(11) }}
  • A.10111011
  • B.10111101
  • C.10111100
  • D.10101100
  1. 设A=true,B=false,C=false,D=true,以下逻辑运算表达式的值为假的是() {{ select(12) }}
  • A. ((AB)C)D((A \wedge B) \vee C) \wedge D
  • B. (AB)(CD)(A \vee B) \wedge (C \vee D)
  • C. A((BC)D)A \wedge ((B \vee C) \vee D)
  • D. (A(BC))D(A \wedge (B \vee C)) \vee D
  1. 二叉树的中序序列为ABCEFGHD,后序序列为ABFHGEDC,则其前序序列( )。 {{ select(13) }}
  • A.CBADEGHF
  • B.CBADEGFH
  • C.CBDAEGFH
  • D.CBADGEFH
  1. 从班级中体育比较好的12人中选5人去参加运动会,其中田 乙 丙最多同时选两人,不同的选法共有( )种。 {{ select(14) }}
  • A.792
  • B.756
  • C.720
  • D.676
  1. 以下哪个结构可以用来存储图?() {{ select(15) }}
  • A.栈
  • B.二叉树
  • C.邻接表
  • D.队列

二、阅读程序(程序输入不超过数组或字符串定义的范围:判断题正确填V,错误填×;

除特殊说明外,判断题每题1.5分,选择题每题3分,共计40分) (1)

#include<iostream>
#include<cstring>	//第2行
using namespace std;
char s1[1005], s2[1005];
int a[1005],b[1005], c[1005];
int main()
{
	int la,lb,lc;
	scanf("%s",s1);		//第9行
	scanf("%s",s2);		//第10行
	la = strlen(s1);
	lb = strlen(s2);
	lc = max(la,lb)+ 1;
	for(int i=0;i<la;++i)
		a[la-i]= s1[i] -'0';
	for(int i=0;i<lb;++i)
		b[lb-i] = s2[i] -'0';
	for(int i=1;i<=lc;i++){
		c[i] += a[i] + b[i];
		c[i+1] = c[i]/10;
		c[i] = c[i]%10;
	}
	
	if(c[lc]==0 && lc>0)	//第24行
		lc--;
	for(int i=lc;i>0;i--)
		printf("%d",c[i]);
	return 0;
}

判断题

  1. 将第2行代码改为#include<stdio.h>,程序的运行结果不会改变 ( ) {{ select(16) }}
  • true
  • false
  1. 将第9~10行代码改为cin>>s1>>s2;,程序的运行结果不会改变。 ( ) {{ select(17) }}
  • true
  • false
  1. 若输入两个都超过1005位长的正整数,则程序一定会出错且无输出。 ( ) {{ select(18) }}
  • true
  • false
  1. 在输入00的情况下,将第24行代码中的lc>0去掉,程序的运行结果不会() {{ select(19) }}
  • true
  • false

选择题

  1. 若输入数据为1024 1000,则输出为( )。{{ select(20) }}
  • A.24
  • B.2024
  • C.1024
  • D.1000

21.若输入数据为1 -1,则输出为( )。{{ select(21) }}

  • A.1
  • B.0
  • C.-1
  • D.以上都不是

(2)

#include <bits/stdc++.h>
using namespace std;
const int MAXN = 10005;
int n, a[MAXN], b[MAXN] ;
void mergesort(int *a, int l, int r)
{
	int i,j,cnt,mid;
	if (l == r)
		return;
	mid = (l + r)/2;
	mergesort(a, l, mid);
	mergesort(a, mid + 1, r);
	i = l,j=mid +1,cnt= 0;
	while (i <= mid && j <= r)
	{
		if (a[i] <= a[j])
			b[++cnt]= a[i++];
		else
			b[++cnt]= a[j++];
	}
	
	while (i <= mid)
		b[++cnt] = a[i++];
	while (j <= r)
		b[++cnt] = alj++];
	for(i =l; i <= r; i++)
		a[i] = b[i-l+1];
}
int main(void)
{
	cin >> n;
	for (int i =1; i <= n; i++)
		cin >> a[i];
	mergesort(a, 1, n);
	for (int i= 1; i<= n; i++)
		cout << a[i] << (i == n ? '\n': ' ');
	return 0;
}

判断题

  1. 该排序算法用到的是不稳定的排序算法。 ( ){{ select(22) }}
  • true
  • false
  1. 将第10行改为mid=l+r>>1;,程序的输出结果不变。 ( ){{ select(23) }}
  • true
  • false
  1. 该排序算法用到了分治的思想。 ( ){{ select(24) }}
  • true
  • false
  1. 第35行代码用到的三目运算符处理代码可以用等价的条件语句来写。 (){{ select(25) }}
  • true
  • false

选择题

  1. 在最坏情况下,该算法的时间复杂度和下面哪个算法相当?(){{ select(26) }}
  • A.插入排序
  • B.选择排序
  • C.堆排序
  • D.快速排序
  1. 若输出2 3 5 7 8,则输入可能为( )。{{ select(27) }}
  • A.1 2 4 6 7
  • B.8 7 5 2 3
  • C.3 4 2 5 7
  • D.8 2 3 4 5

(3)

#include<bits/stdc++.h>
using namespace std;
int t,x[100],a[100];
void dfs(int d,int i,int n)
{
	if(n==1)
	{
		for(int k=0;k<d;k++)
			printf("%4d",a[k]);	//第9行
		printf("\n");
	}
	else
	{
		for(int k=i;k<t;k++)
			if(n%x[k]==0)
			{
				a[d]=x[k];
				dfs(d+1,k,n/x[k]);
			}	
	}
	
}

int main(){

	int n;
	cin>>n;
	for(int i=n;i>1;i--)	//第24行
		if(n%i==0)			//第25行
			x[t++]=i;		//第26行
	dfs(0,0,n);
	return 0;
}

判断题

  1. 该程序的作用是对n进行质因数分解并从小到大依次打印。(){{ select(28) }}
  • true
  • false
  1. 将第9行代码 printf()"%4d",a[k]); 中的 4 去掉,程序输出不变。(){{ select(29) }}
  • true
  • false
  1. 第24~26行的作用是求出n的所有因子。(){{ select(30) }}
  • true
  • false
  1. 程序运行过程中,若输入n为0或者负数,程序一定会打印错误,崩溃退出(){{ select(31) }}
  • true
  • false

选择题

  1. 若输入6,则输出为( )。{{ select(32) }}
  • A.6 3 2
  • B.72 36 2
  • C.6 2 3
  • D.72 2 36
  1. 若输入n=1,那么输出结果可能是()。 {{ select(33) }}
  • A. 2
  • B. 1
  • C. 0
  • D.什么也不输出
  1. (4分)若输入2024,则输出有( )行。 {{ select(34) }}
  • A.18
  • B.20
  • C.21
  • D.19

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

(1)扫雷游戏是一款十分经典的单机小游戏。在 nnmm 列的雷区中有一些格子含有地雷 (称为地雷格),其他格子不含地雷(称为非地雷格)。玩家翻开一个非地雷格时,该 格子中将会出现一个数字,提示周围格子中有多少个是地雷格。玩家的目标是在不 翻出任何地雷格的条件下,找出所有的非地雷格。请将程序补充完整。 现在给出n行m列的雷区中的地雷分布,要求计算出每个非地雷格周围的地雷格数。 注:一个格子的周围格子包括其上、下、左、右、左上、右上、左下、右下这8个 方向上与之直接相邻的格子。

输入格式: 第1行是用一个空格隔开的两个整数n和m,分别表示雷区的行数和列数。接下来 nn 行,每行 mm 个字符,描述了雷区中的地雷分布情况。字符 * 表示相应格子是地雷格,字符?表示相应格子是非地雷格。相邻字符之间无分隔符。

输出格式: 输出文件包含n行,每行m个字符,描述整个雷区。用 * 表示地雷格,用周围 的地雷个数表示非地雷格。相邻字符之间无分隔符。

输入样例:

33
*??
??
?*?

输出样例:

*10
221
1*1
#include<bits/stdc++.h>
using namespace std;
const int dx[]= (1, 1,1,0,0,-1,-1,-1];
const int dy[] = (-1,0,1,-1,1,-1,0,1];
char g[101][101];
int main()
{
	int n,m,cnt;
	cin>>n>>m;
	for(int i=0;icn;i++)
		for(int j=0;j<m;j++)
			cin>>g[i][j];
	for(int i=0;i<n;i++){
		for(int j=0;j<m;j++)
		{
			if(①)
			{
				②;
				for (int k = 0; ③; k++)
					if(④)
						cnt++;
				cout << cnt;
			}
			else
				cout<<"*";
		}
		if(⑤)
			cout<<endl;
	}
	return 0;

}
  1. ①处应填() {{ select(35) }}
  • A.g[i][j]!='?’
  • B.g[i][j]!='\0'
  • C.g[i][j]!='*'
  • D.g[i][j]=='*'
  1. ②处应填( )。 {{ select(36) }}
  • A. cnt++
  • B. cnt = 0
  • C. cnt=0
  • D. ++cnt =0
  1. ③处应填( )。 {{ select(37) }}
  • A. k < 8
  • B. k < m
  • C. k < n
  • D. k < min(m,n)
  1. ④处应填( )。 {{ select(38) }}
  • A. g[i+dy[k]][j+dx[k]]==‘*'
  • B. g[i-dx[k]][j-dy[k]]=='*'
  • C. g[i+dx[k]][j+dy[k]]=='*'
  • D. g[i-dy[k]][j-dx[k]]=='*'
  1. ⑤处应填() {{ select(39) }}
  • A. j !=m
  • B. j !=m-1
  • C. i != n
  • D. i != n-1

(2) 给你n根火柴棍,你可以拼出多少个形如 A+B=CA+B=C 的等式?等式中的 ABCA、B、C 是用 火柴棍拼出的整数(若该数非零,则最高位不能是 00 )。用火柴棍拼数字 0 90~9 的拼法 如图所示。

image-20240814095042202

注意:

  1. 加号与等号各自需要两根火柴棍;
  2. 如果A不等于B,则视A+B=C与B+A=C为不同的等式(A,B,C=0);
  3. n根火柴棍必须全部用上。

输入格式:

一个整数 n(1n24)n(1 \le n \le 24)

输出格式:

一个整数,表示能拼成的不同等式的数目。

输入样例:

18

输出样例:

9

样例说明:

9 个等式为 0+4=4、0+11=11、1+10=11、2+2=4、2+7=9、4+0=4、7+2=9、10+1=11、11+0=11。

#include<bits/stdc++.h>
using namespace std;
int hcb[10] = {6,2,5,5,4,5,6,3,7,6};
int n;
int matches(int num)
{
	int i,k=0;
	for(i=num;i!=0;①)
		②;
	if(③)
		k+=hcb[0];
	return k;
}

int main()
{
	int i,j,count;
	④;
	cin>>n;
	for(i=0;i<=1000;i++)
		for(j=0;j<=1000;j++)
			if(⑤)
				count++;
	cout<<count;
	return 0;

}
  1. ①处应填( )。 {{ select(40) }}
  • A. i%=10
  • B. i/=10
  • C. i++
  • D. i--
  1. ②处应填( )。 {{ select(41) }}
  • A. k += hcb[i]
  • B. k += hcb[i/10]
  • C. k += hcb[i/10%10]
  • D. k += hcb[i%10]
  1. ③处应填( )。 {{ select(42) }}
  • A. num==0
  • B. num!=0
  • C. num==n
  • D. num!=n
  1. ④处应填( )。 {{ select(43) }}
  • A. count=1
  • B. count=match(n)
  • C. count=0
  • D. count=n
  1. ⑤处应填( )。{{ select(44) }}
  • A. matches(i)+matches(j)+matches(i+j)+6==n
  • B. matches(i)+matches(j)+matches(i+j)+3==n
  • C. matches(i)+matches(j)+matches(i+j)+4==n
  • D. matches(i)+matches(j)+matches(i+j)+5==n

初赛模拟卷B

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