BCSP 小高组知识点

5 篇文章 0 订阅

BCSP —— 小高组知识样题

下载链接

样例题目下载链接
活动范围下载链接
活动方案下载链接

感谢wuboyan714提供题目

重点题目分析

1.进制转换

10进制转换任意进制

根据十进制转二进制的原理:十进制数除以2,余数为权位上的数,得到商继续除以2,直到商为0终止,然后反向取余数。我们可以举一反三:把里面的2替换成目标进制的数

任意进制转换10进制

把任意进制数按权展开、相加即得十进制数。

10进制转换任意进制 —— 小数

十进制小数转换成R进制小数采用“乘R取整,顺序输出”

原题:
将整数部分转换为二进制数:9 转换为二进制数为 1001。

将小数部分 0.375 转换为二进制数:
    0.375 * 2 = 0.75,整数部分为 0,二进制数的下一位为 0。
    0.75 * 2 = 1.5,整数部分为 1,二进制数的下一位为 1。
    0.5 * 2 = 1,整数部分为 1,二进制数的下一位为 1。
    0,小数部分为 0,结束。

因此,9.375 的二进制表示为 1001.011。

任意进制转换10进制

把R进制数按权展开、相加即得十进制数。
这里用一张别人的图片,这样更好理解
在这里插入图片描述
本图片出自 CSDN@爱躺平的威威

学了以上的方法,可以在多进制之间来回的转换,最终得出结果

2.图片大小计算

原题:
在这里插入图片描述
我们的思路:
可以先计算出单个图片的大小,然后除以96M

计算公式:
( w ∗ h ∗ c ) / 8 / 1024 / 1024 = S t o r a g e (w*h*c) / 8 / 1024 / 1024 = Storage (whc)/8/1024/1024=Storage
W ——宽 W——宽 W——
H ——高 H——高 H——
S t o r a g e ——计算结果 ( 用 M B 表达 ) Storage——计算结果(用 MB 表达) Storage——计算结果(MB表达)

3.原码 反码 补码的计算

原码

原码就是机器码。
1的原码是0000 0001,-1的原码是1000 0001。
因为最高位是符号位,所以他的取值范围是[1111 1111,01111 1111] ,即[-127,127]。

反码

正数的反码是其本身。
负数的反码是其原码除符号位以外其余各位按位取反。-5的反码是1111 1010。

补码

正数的补码是其本身。
负数的补码是其反码+1。例如-5的补码是1111 1011。

可见对于负数而言,其反码和补码是无法直接看出来的,必须经过计算参能得出结果。

4.二叉树遍历

老生常谈的东西了
如果学习过二叉树的基本都会

记住这个口诀:
前序——根左右
中序——左根右
后续——左右根

这个口诀的意思也不难理解
就是:
根——根节点(指非叶节点的节点)
左——左子树(根左边的节点)
有——右子树(根右边的节点)

用C++遍历二叉树的方法自己上网搜,方法也非常简单(本文不写了)

5.C++枚举关键字

原题:
在这里插入图片描述
这个题目考的是C++的数据结构

这道题说实话对于小高组有点超标了

这题纯属考验积累


C . e n u m C.enum C.enum

枚举类型的定义:枚举类型(enumeration)是 C++ 中的一种派生数据类型,它是由用户定义的若干枚举常量的集合。

这道题了解这个关键字就行,因为在考试的时候一般不会问这种关键字详细的使用方法。

6.组合排序

这个点非常的重要,所以本文详细讲解一下啦~

排列
全排列公式

N ! N! N!
举例说明:

1 2 3 有三个数 所以N=3

排列:
	1开头的
	1 2 3
	1 3 2
	2开头的
	2 1 3
	2 3 1
	3开头的
	3 1 2
	3 2 1

一共有3的阶乘个 也就是6个
捆绑排列公式

看一个最形象的例子
有5个同学需要排队,其中3个同学是三胞胎,因为各种原因,他们被要求要站一起,此时有多少种排列可能?(三胞胎自己内部也要排序)

这个题我们可以用捆绑法来解决
就是指把这三胞胎捆一起,看做一个人
此时就有3个人:
1(原来的1 2 3) 2 3
在用原来学过的全排列(变形一下)答案就是:36

过程:
3 ! = 6 3! = 6 3!=6
6 ∗ 6 = 36 6 * 6 = 36 66=36
答案就是36
因为三胞胎内部自己也要排序
所以最后还要计算 6 ∗ 6 6*6 66

组合公式

组合,英文名为Combination,简称C。数组{1, 2, 3, 4, 5},我们需要从数组中选择任意3个元素,那么有多少种方式呢?
根据前面的推导,我们能够得知,如果从5个元素中选择3个元素,排列的方式 有 P ( 5 , 3 ) = 5 ! ( 5 − 3 ) ! = 60 P ( 5 , 3 ) = 5 ! ( 5 − 3 ) ! = 60 P ( 5 , 3 ) = ( 5 − 3 ) ! 5 ! ​ = 60 有 P ( 5 , 3 ) = 5 ! ( 5 − 3 ) ! = 60 P(5, 3) = \frac{5!}{(5-3)!} = 60 P(5,3)=(5−3)!5!​=60 P(5,3)=5!(53)!=60P(5,3)=(53)!5!=60P(5,3)=(53)!5!=60种。但是组合的时候,对顺序是不敏感的,比如我们选1,2,3与选1,3,2,虽然是两种排列方式,但是在组合里是一种情况。3个元素的全排列一共有 3 ! = 6 3!=6 3!=6种,所以组合的公式为
C ( N , K ) = ! N ! ​ ! K ( N − k ) C(N,K)=\frac{!N!​}{!K(N−k)} C(N,K)=!K(Nk)!N!

7.链表

链表的存储方法,以及操作都非常的简单
在STL模板中也有list

但还是 要复习一下!
此处没有链表的代码,想要抄作业的同学可以看下一篇了
一、链表特性

(1) 链表是由一系列的结点组成,结点包含两个域,一个数据域,一个指针域。
(2) 链表内存是非连续的,因此添加或删除元素,时间复杂度都是常数项,不需要移动元素,比数组添加删除效率高。
(3) 链表只有在需要的时候,才分配内存。
(4) 链表,只要拿到第一个结点,相当于拿到整个链表。
(5) 链表需要额外的空间保存结点的关系:前驱、后继关系。
二、链表和数组区别:

(1) 数组必须事先定义固定的长度(元素个数),不能适应数据动态地增减的情况。当数据增加时,可能超出原先定义的元素个数;当数据减少时,造成内存浪费。
(2) 链表动态地进行存储分配,可以适应数据动态地增减的情况,且可以方便地插入、删除数据元素。(数组中插入、删除数据项时,需要移动其他数据项)

总结:不如直接用list或者vector(list就是链表,vector操作简单、而且基本都学过)

阅读程序

小技巧

1.程序填空

在做阅读程序填空的时候(完形填空DOGE)我们可以按照已经给的代码以及算法描述结合着看,这样不仅可以提高效率,还可以提高正确率
记得最后填完了,还有时间的话可以自己写样例

2.阅读程序

可以根据给出的代码来猜算法,这样可以大大的提高正确率
(如果猜不出来或者没有思路,可以先看数据范围)

友情链接

BCSP官方报名网站
PCK团队
NOI官网

  • 40
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值