信息学奥赛初赛天天练-51-CSP-J2019基础题2-质数、约数、最大公约数、链表、枚举算法、二叉树数组存储

PDF文档公众号回复关键字:20240731

2019 CSP-J 基础题2

单项选择题(共15题,每题2分,共计30分:每题有且仅有一个正确选项)

6 链表不具有的特点是( )

A 插入删除不需要移动元素

B 不必事先估计存储空间

C 所需空间与线性表长度成正比

D 可随机访问任一元素

7 把8个同样的球放在5个同样的袋子里,允许有的袋子空着不放,问共有多少种不同的分法?( )
提示:如果8个球都放在一个袋子里,无论是哪个袋子,都只算同一种分法

A 22

B 24

C 18

D 20

8 一棵二叉树如右图所示,若采用顺序存储结构,即用一维数组元素存储该二叉树中的结点(根结点的下标为1,若某结点的下标为i ,则其左孩子位于下标2i处、右孩子位于下标2i+l处),则该数组的最大下标至少为( )

A 6

B 10

C 15

D 12

9 在100以内最大的素数是( )[2分]

A 89

B 97

C 91

D 93

10 两个数319和377的最大公约数是( )[2分]

A 27

B 33

C 29

D 31

2 相关知识点

1) 链表

是一种常见的数据结构,它是由一系列节点(Node)组成,每个节点包含两部分:数据域和指针域。数据域用于存储数据,指针域用于存储下一个节点的地址。链表的第一个节点称为头节点(Head),最后一个节点称为尾节点(Tail),尾节点的指针域指向空(NULL)

链表占用空间大小,和链表的长度有关,没增加一个节点,增加一个数据节点和一个指针节点,存储空间和链表长度成正比

链表的插入删除,只需要改变指针的指向,不需要移动元素

随机存取

随机存取(直接存取,Random Access)指的是当存储器中的数据被读取或写入时,所需要的时间与该数据所在的物理地址无关

顺序存取

顺序存取 (Sequential Access)是一种按记录的逻辑顺序进行读、写操作的存取方法,所需要的时间与该数据所在的物理地址有关。

顺序存取表现为:在存取第N个数据时,必须先访问前(N-1)个数据

#include<bits/stdc++.h>
using namespace std;
/*
  随机存取、顺序存取 
*/ 
int a[10]={0,1,2,3,4,5,6,7,8,9}; 
int main(){
	cout<<a[9]<<endl;//随机读取下标为9的元素 输出 9  

	for(int i=0;i<10;i++){//顺序存储 逐一读取 
		cout<<a[i]<<" ";		
	}
	return 0;
}

数组可以随机以及顺序存取,而链表只能顺序存取

2) 枚举算法

枚举法是训练我们逻辑思维严密性的一种数学逻辑

在计算的过程中,我们一定要遵循枚举法的思路,把所有的情况,按照一定的顺序,一一列举出来

所以我们在学习枚举法的时候,一定要从小到大一一列举,不重不漏

例题

有红色和蓝色两种文具盒,小黄人要把8只相同的铅笔放到这两个文具盒中,每个文具盒至少放一支铅笔,那么一共有多少种不同的方法?

答案 7种

分析

红色和蓝色总共8只

每个文具盒子至少一只,固定红色最少1只,最多7只,从红色从小到大顺序枚举,可以做到不重不漏

总共有红色和蓝色2种,红色固定后,蓝色也固定了

红色  蓝色
 1    7
 2    6
 3    5
 4    4
 5    3
 6    2
 7    1

3) 二叉树数组表示

完美二叉树数组表示

完美二叉树,我们将所有节点按照层序遍历的顺序存储在一个数组中,则每个节点都对应唯一的数组索引

若节点的索引为 𝑖 ,则该节点的左子节点索引为 2𝑖 + 1 ,右子节点索引为 2𝑖 + 2

任意二叉树数组表示

任意二叉树有些节点是不满的,因此把不满的二叉树对应节点空出来,或者使用特殊数字表示,比如使用-1表示

4) 质数-素数 (Prime Number)

一个大于1的自然数,除了1和它本身以外不再有其他因数的数称为质数

质数又称素数

例如

2、3、5、7、11、13、17、19等都是质数

注意

质数只有两个正因数:1和它本身

5) 约数 、公约数、最大公约数

因数 -约数

如果 d|a 且 d>=0 则称d是a的因数 ,因数也可以被称为约数

例如

2|8 ,则称2是8的因数,或者称2是8的约数

公约数

如果数p同时是两个数a,b的约数,我们就称p为a和b的公约数

即 p|a , p|b 则p是a和b的公约数

例如

2|4 ,2|6 则2是4和6的公约数

最大公约数

a和b的所有公约数中最大的那个数称为a和b的最大公约数

24的约数

1 2 3 4 6 8 12 24

18的约数

1 2 3 6 9 18

18和24的公约数

1 2 3 6

公约数最大的是6,所以6是18和24的最大公约数

3 思路分析

6 链表不具有的特点是( D )

A 插入删除不需要移动元素

B 不必事先估计存储空间

C 所需空间与线性表长度成正比

D 可随机访问任一元素

分析

链表插入和删除只需要变更指针,不需要移动元素
链表按节点指针链接,不需要像数组提前预估内存空间,占用空间随着节点增加长度相应正比例增加
链表只能顺序访问,不能随机访问

7 把8个同样的球放在5个同样的袋子里,允许有的袋子空着不放,问共有多少种不同的分法?( C )
提示:如果8个球都放在一个袋子里,无论是哪个袋子,都只算同一种分法

A 22

B 24

C 18

D 20

分析

枚举法
放1个袋子  1种
8个球都放入
放2个袋子  4种  
1 7
2 6
3 5
4 4
放3个袋子  5种
1 1 6
1 2 5
1 3 4
2 2 4
2 3 3
放4个袋子  5种
1 1 1 5
1 1 2 4
1 1 3 3
1 2 2 3
2 2 2 2
放5个袋子  3种
1 1 1 1 4
1 1 1 2 3
1 1 2 2 2
上述情况总共 1+4+5+5+3=18种

8 一棵二叉树如右图所示,若采用顺序存储结构,即用一维数组元素存储该二叉树中的结点(根结点的下标为1,若某结点的下标为i ,则其左孩子位于下标2i处、右孩子位于下标2i+1处),则该数组的最大下标至少为( C )

A 6

B 10

C 15

D 12

分析

如果下图所示
1的下标为1
2的下标为2*1+1=3
3的下标为2*3+1=7
4的下标为2*7+1=15

9 在100以内最大的素数是( B )[2分]

A 89

B 97

C 91

D 93

分析

97只能被1和其他本身整除,是质数
98可以2整除,所以不是质数
99可以被3整除,所以不是质数
所以100以内最大的素数为97

10 两个数319和377的最大公约数是( C )[2分]

A 27

B 33

C 29

D 31

分析

319不能被3整除,所以27和33不可能是最大公约数
319和377都可以被29整除,整除后商位11和13都是质数,不能继续被整除
所以29是最大公约数
posted @ 2024-07-31 18:51  new-code  阅读(1)  评论(0编辑  收藏  举报