1

历年CSP-J初赛真题解析 | 2015年CSP-J初赛

​欢迎大家订阅我的专栏:算法题解:C++与Python实现
本专栏旨在帮助大家从基础到进阶 ,逐步提升编程能力,助力信息学竞赛备战!

专栏特色
1.经典算法练习:根据信息学竞赛大纲,精心挑选经典算法题目,提供清晰的代码实现与详细指导,帮助您夯实算法基础。
2.系统化学习路径:按照算法类别和难度分级,从基础到进阶,循序渐进,帮助您全面提升编程能力与算法思维。

适合人群:

  • 准备参加蓝桥杯、GESP、CSP-J、CSP-S等信息学竞赛的学生
  • 希望系统学习C++/Python编程的初学者
  • 想要提升算法与编程能力的编程爱好者

附上汇总贴:历年CSP-J初赛真题解析 | 汇总_热爱编程的通信人的博客-CSDN博客


单项选择

第1题

1MB等于( )。

A.10000字节

B.1024字节

C.1000×1000字节

D.1024×1024字节

【答案】:D

【解析】

\(1MB=2^{10}KB=2^{20}B\)

第2题

在PC机中, PENTIUM(奔腾)、酷睿、赛扬等是指( )。

A.生产厂家名称

B.硬盘的型号

C.CPU的型号

D.显示器的型号

【答案】:C

【解析】

计算机常识,都是CPU型号

第3题

操作系统的作用是( )。

A.把源程序译成目标程序

B.便于进行数据管理

C.控制和管理系统资源

D.实现硬件之间的连接

【答案】:C

【解析】

同2014年,控制和管理系统资源。A是编译器作用

第4题

在计算机内部用来传送、存贮、加工处理的数据或指令都是以( )形式进行的。

A.二进制码

B.八进制码

C.十进制码

D.智能拼音码

【答案】:A

【解析】

计算机只认二进制数据

第5题

下列说法正确的是( )。

A.CPU的主要任务是执行数据运算和程序控制

B.存储器具有记忆能力,其中信息任何时候都不会丢失

C.两个显示器屏幕尺寸相同,则它们的分辨率必定相同

D.个人用户只能使用Wifi的方式连接到Internet

【答案】:A

【解析】

B选项RAM断电后信息会丢失。C选项分辨率可能不同。D选项除无线外,也可以使用有线方式接入Internet

第6题

二进制数00100100和00010100的和是( )

A.00101000

B.01100111

C.01000100

D.00111000

【答案】:D

【解析】

2014年已经有过这道题,1+1需要进位

第7题

与二进制小数0.1相等的十六进制数是( )。

A.0.8

B.0.4

C.0.2

D.0.1

【答案】:A

【解析】

\((0.1)_2=1*2^{-1}=(0.5)_{10}\)

十进制小数转化为R进制,小数部分 * R取整,再用剩余数字 * R继续取整,依次得到R进制小数后每一位,直到取整后0.0

第8题

所谓的“中断”是指( )。

A.操作系统随意停止一个程序的运行

B.当出现需要时,CPU暂时停止当前程序的执行转而执行处理新情况的过程

C.因停机而停止一个程序的运行

D.电脑死机

【答案】:B

【解析】

计算机基础概念(三短一长选最长)

第9题

计算机病毒是( )。

A.通过计算机传播的危害人体健康的一种病毒

B.人为制造的能够侵入计算机系统并给计算机带来故障的程序或指令集合

C.一种由于计算机元器件老化而产生的对生态环境有害的物质

D.利用计算机的海量高速运算能力而研制出来的用于疾病预防的新型病毒

【答案】:B

【解析】

计算机基础概念

第10题

FTP可以用于( )。

A.远程传输文件

B.发送电子邮件

C.浏览网页

D.网上聊天

【答案】:A

【解析】

2014年有过类似的题,File Transfer Protocol

第11题

下面哪种软件不属于即时通信软件( )。

A.QQ

B.MSN

C.微信

D.P2P

【答案】:D

【解析】

2014年有介绍过P2P,如迅雷。

MSN:Microsoft Service Network

第12题

6个顶点的连通图的最小生成树,其边数为( )。

A.6

B.5

C.7

D.4

【答案】:B

【解析】

n个点至少要n-1条边才能连通

第13题

链表不具备的特点是( )。

A.可随机访问任何一个元素

B.插入、删除操作不需要移动元素

C.无需事物估计存储空间大小

D.所需存储空间与存储元素个数成正比

【答案】:A

【解析】

2013年有过类似的题,链表不能随机访问,需要从头遍历

第14题

线性表若采用链表存储结构,要求内存中可用存储单元地址( )。

A.必须连接

B.部分地址必须连接

C.一定不连接

D.连接不连接均可

【答案】:D

【解析】

内存地址可连续可不连续

第15题

今有一空栈S,对下列待进栈的数据元素序列a,b,c,d,e,f依次进行进栈,进栈,出栈,进栈,进栈,出栈的操作,则此操作完成后,栈S的栈顶元素为:( )

A.f

B.c

C.a

D.b

【答案】:B

【解析】

模拟画栈的图,栈顶为c

第16题

前序遍历序列与中序遍历序列相同的二叉树为( )。

A.根结点无左子树

B.根结点无右子树

C.只有根结点的二叉树或非叶子结点只有左子树的二叉树

D.只有根结点的二叉树或非叶子结点只有右子树的二叉树

【答案】:D

【解析】

根左右=左根右,相当于所有节点都没有“左”子树,不仅仅是根节点没有“左”子树。

第17题

如果根的高度为1,具有61个结点的完全二叉树的高度为( )

A.5

B.6

C.7

D.8

【答案】:B

【解析】

\(2^{n-1}-1\) < 完全二叉树节点总数 < \(2^n-1\)

第18题

下列选项中不属于视频文件格式的是( )。

A.TXT

B.AVI

C.MOV

D.RMVB

【答案】:A

【解析】

2014年考过,txt是文本格式

第19题

某算法的计算时间表示为递推关系式T(n)=T(n-1)+n(n为正整数)及T(0)=1,则该算法的时间复杂度( )。

A.\(O(logn)\)

B.\(O(n logn)\)

C.O(n)

D.\(O(n^2)\)

【答案】:D

【解析】

T(n)=T(n-1)+n

T(n-1)=T(n-2)+(n-1)

T(n-2)=T(n-3)+(n-2)

...

T(2)=T(1)+2

T(1)=T(0)+1

全部加起来,T(n)=T(0)+1+2+...+n=\(\frac{n^2}{2}+\frac{n}{2}+1\),时间复杂度为\(O(n^2)\)

问题求解

第20题

在NOI系列赛事中参赛选手必须使用累承办单位统一提供的设备。下列物品中不允许选手自带的是( )。

A.鼠标

B.笔

C.身份证

D.准考证

【答案】:A

【解析】

不能自带鼠标

第21题

重新排列1234使得每一个数字都不在原来的位置上,一共有( )种排法。

【答案】:9

【解析】

枚举即可

第1个数字是2:2143、2341、2413

第1个数字是3:3142、3412、3421

第1个数字是4:4123、4312、4312

第22题

一棵结点数为2015的二叉树最多有( )个叶子结点。

【答案】:1008

【解析】

二叉树性质:叶子节点个数=度为2的节点个数+1

2015个节点有11层,第10层时有\(2^{10}-1=1023\)个节点,叶子节点个数为2015-1023=992,第10层有496个父节点,再用512-496=16。共992+16=1008个

阅读程序

#include<iostream>
using namespace std;
int main() {
    int a, b, c;
    a = 1; b = 2; c = 3;
    if (a>b) {
        if (a>c) 
            cout << a << ' ';
        else
            cout << b << ' ';
    }
    cout << c << endl;
    return 0;
}

第23题

输出:( )

【答案】:3

【解析】

模拟,因为a>b,所以第6行至第第10行都不执行。最后只输出c

#include <iostream>
using namespace std;
struct point {
    int x;
    int y;
};
int main() {
    struct EX {
        int a;
        int b;
        point c;
    }e;
    e.a = 1;
    e.b = 2;
    e.c.x = e.a + e.b;
    e.c.y = e.a * e.b;
    cout << e.c.x << ' ' << e.c.y << endl;
    return 0;
}

第24题

输出:( )

【答案】:3 2

【解析】

image

#include <iostream>
#include <string>
using namespace std;
int main() {
    string str;
    int i;
    int count;
    count = 0;
    getline(cin, str);
    for (i=0; i<str.length(); i++) {
        if (str[i]>='a' && str[i]<='z')
            count++;
    }
    cout << "It has " << count << " lowercases" << endl;
    return 0;
}

第25题

输入:NOI2016 will be held in Mian Yang.

输出:( )

【答案】:It has 18 lowercases

【解析】

题目是输出字符串中所有小写字母的数量,共18个。

#include <iostream>
using namespace std;
void fun(char *a, char *b) {
    a = b;
    (*a) ++;
}
int main() {
    char c1, c2, *p1, *p2;
    c1='A';
    c2='a';
    p1 = &c1;
    p2 = &c2;
    fun(p1, p2);
    cout << c1 << c2 << endl;
    return 0;
}

第26题

输出:( )

【答案】:Ab

第4行,a = b 就是 a = &c2,那么第5行修改*a的值,就是在修改c2的值,

完善程序

(质因数分解)给出正整数n,请输出将n质因数分解的结果,结果从小到大输出。

例如:输入n=120,程序应该输出2 2 2 3 5,表示120=2×2×2×3×5.输入保证2≤n≤10^9。提示:先从小到大枚举变量i,然后用i不停试除n来寻找所有的质因子。

试补全程序。

#include <cstdio>
using namespace std;

int n, i;

int main() {
    scanf("%d", &n);
    for (i = __1__; __2__ < = n; i ++) {
        __3__ {
            printf("%d ", i);
            n = n / i;
        }
    }
    if(__4__)
        printf("%d ", __5__);
    return 0;
}

第34题

1处应填( )

A.1

B.n-1

C.2

D.0

【答案】:C

【解析】

从2开始的每个因数,拿来试除n,选C

第35题

2处应填( )

A.n / i

B.n / (i * i)

C.i * i

D.i * i * i

【答案】:C

【解析】

质因数分解只试除到小于等于\(\sqrt{n}\)的那些质因子,选C

第36题

3处应填( )

A.if (n % i == 0)

B.if (i * i <= n)

C.while (n % i == 0)

D.while (i * i <= n)

【答案】:C

【解析】

若n%i==0,则反复除,获得多个质因数,选C

第37题

4处应填( )

A.n > 1

B.n <= 1

C.i < n / i

D.i + i <= n

【答案】:A

【解析】

试除完所有小于等于√n的因子后,n还有剩(没有被除成1),说明这个此时n的值就是那个唯一大于√n的质因子

第38题

5处应填( )

A.2

B.n / i

C.n

D.i

【答案】:C

【解析】

参考第4题,此时就应该输出n。例如n=5时,输出5

(最小区间覆盖)给出n个区间,第i个区间的左右端点是[\(a_i\), \(b_i\)]。现在要在这些区间中选出若干个,使得区间[0,m]被所选区间的并覆盖(即每一个\(0\le i\le m\)都在某个所选的区间中)。保证答案存在,求所选区间个数的最小值。

输入第一行包含两个整数n和m\((1\le n\le 5000, 1\le m\le 10^9)\)

接下来n行,每行两个整数\(a_i\)\(b_i(0\le a_i,b_i\le m)\)

提示:使用贪心法解决这个问题。现有\(O(n^2)\)的时间复杂度排序,然后贪心选择这些区间。

试补全程序。

#include <iostream>

using namespace std;

const int MAXN = 5000;
int n, m;
struct segment {int a, b; } A[MAXN];

void sort()  // 排序
{
	for (int i=0; i<n; i++)
		for (int j=1; j<n; j++)
			if (__1__)
			{
				segment t = A[j];
				__2__
			}
}

int main()
{
	cin >> n >> m;
	for (int i=0; i<n; i++)
		cin >> A[i].a >> A[i].b;
	sort();
	int p = 1;
	for (int i=1; i<n; i++)
		if (__3__)
			A[p++] = A[i];
	n = p;
	int ans = 0, r = 0;
	int q = 0;
	while (r < m)
	{
		while (__4__)
			q++;
		__5__;
		ans++;
	}
	cout << ans << endl;
	return 0;
}

第39题

1处应填( )

A.A[j].b>A[j-1].b

B.A[j].a<A[j-1].a

C.A[j].a>A[j-1].a

D.A[j].b<A[j-1].b

【答案】:B

【解析】

冒泡排序,每次循环将左端点最大的线段排到最右边

第40题

2处应填( )

A.A[j+1]=A[j];A[j]=t;

B.A[j-1]=A[j];A[j]=t;

C.A[j]=A[j+1];A[j+1]=t;

D.A[j]=A[j-1];A[j-1]=t;

【答案】:D

【解析】

如果左侧线段的左端点更大,左右交换

第41题

3处应填( )

A.A[i].b>A[p-1].b

B.A[i].b<A[i-1].b

C.A[i].b>A[i-1].b

D.A[i].b<A[p-1].b

【答案】:A

【解析】

把被其他更大范围的线段覆盖的线段删除

第42题

4处应填( )

A.q+1<n&&A[q+1].a<=r

B.q+1<n&&A[q+1].b<=r

C.q<n&&A[q].a<=r

D.q<n&&A[q].b<=r

【答案】:A

【解析】

下下一个线段存在且左端点在已覆盖区间右边界左侧,则下个线段就被跳过。所以出while循环时,会保留最后一个线段左端点在已覆盖区间右边界左侧

第43题

5处应填( )

A.r=max(r,A[q+1].b)

B.r=max(r,A[q].b)

C.r=max(r,A[q+1].a)

D.q++

【答案】:B

【解析】

确定新的已覆盖区间右边界

posted @ 2026-01-19 22:15  热爱编程的通信人  阅读(0)  评论(0)    收藏  举报