历年NOIP提高组初赛选择解析

眉间皱痕 提交于 2021-01-03 14:21:09

碎片知识点

  • 编译型语言是编译一次就可以转成计算机可以直接运行的机器语言程序(如.exe文件)但是由于他们是直接编译的,依赖于计算机的不同,所以跨平台能力比较差,但是运行速度高。

  • 解释性语言则是每次运行前编译,先解释再运行,导致运行效率降低,但是因为其依托于虚拟机/解释器所以跨平台性能好。

  • 高级语言还可分为面向过程语言和面向对象语言。(区别自然是有没有对象)

  • 于 1967 年出现的 Simula67 是历史上第一个面向对象语言

  • Smalltalk 被公认为第二个面向对象的程序设计语言,和第一个IDE

  • C 和 Pascal 是纯面向过程语言

  • 就算没有对象也可以学面向对象的程序设计语言 C++

  • 第一个高级语言是fortran,Ada是美国军方发明的语言,取名Ada是为了纪念第一个女程序员

  • 第一个支持面向对象的语言是simula67

1、 (NOIP-2004–T19-多选)下列哪个(些)程序设计语言支持面向对象程序设计方法( ABDE )。
A. C++     B. Object Pascal     C. C     D. Smalltalk     E. Java

C++,object Pascal,VB,smalltalk(第一个支持动态类型的语言),simula67(第一个面向对象的语言),Java是面向对象的
free Pascal,C是面向过程的

题型一:数学

1.1 组合数学

模型:

  • Catalan数
  • stirling数
  • 容斥原理和错排
  • 不定方程的整数解(可重排列)
    • 正整数解
    • 非负整数解
  • 插空法
  • 捆绑法

1、(NOIP2004–T2-单选)由3个a,5个b和2个c构成的所有字符串中,包含子串“abc”的共有(D )个。 A. 40320     B. 39600     C. 840     D. 780     E. 60

有一定难度的组合数学题,由于要出现“abc”,用捆绑法,把 1 个 a,1 个 b,1 个 c 捆绑起来,这样相当于现在有 1 个“abc”,2 个“a”,4 个“b”,1 个“c”进行排列,根据“不尽相异元素的全排列”的公式(重排)知道,总的情况是8!/(2!*4!)=840,但是 2 个“a”,4 个“b”,1 个“c”也有可能组成“abc”,840里有重复的情况,比如(abc)abcabbb 和 abc(abc)abbb 其实是一种情况,所以要减去 2 个“a”,4 个“b”,1 个“c”也组成 abc 的情况(其实就是只有两个元素的容斥原理),那么这就相当于 2 个“abc”,一个“a”,3 个“b”的全排列数=6!/(2!*3!)=60,所以总的情况数是 840-60=780。

1.2 拓扑排序

1、(NOIP-2004–T20-多选)某大学计算机专业的必修课及其先修课程如下表所示:

2树

2.1二叉树的节点个数计算

1、(NOIP-2004–T4-单选)满二叉树的叶结点个数为N,则它的结点总数为()。 2∗N–1

基本知识:

  • 满二叉树的节点个数=2*子节点个数-1
  • 满二叉树的节点个数=2^树的深度-1
  • 满二叉树的叶结点个数=2^(树的深度-1)

2、(NOIP-2005–T4-单选)完全二叉树的结点个数为4∗N+3,则它的叶结点个数为(E )。 E. 2∗N+2

3、(NOIP-2006–T8-单选)高度为n的均衡的二叉树是指:如果去掉叶结点及相应的树枝,它应该是高度为n-1的满二叉树。在这里,树高等于叶结点的最大深度,根结点的深度为0,如果某个均衡的二叉树共有2381个结点,则该树的树高为( B )。B. 11

2.2排序

1、(NOIP-2006–T10-单选)将5个数的序列排序,不论原先的顺序如何,最少都可以通过( B )次比较,完成从小到大的排序。 A. 6     B. 7     C. 8     D. 9     E. 10

这个题目实在是玄的一批,5个元素有5!=120个全排列,每一次比较能够减少一半的排列,那么就只需要⌊log2(120)⌋+1=7次就好了

2.3复杂度计算

2、(NOIP-2006–T4-单选)在编程时(使用任一种高级语言,不一定是Pascal),如果需要从磁盘文件中输入一个很大的二维数组(例如1000*1000的double型数组),按行读(即外层循环是关于行的)与按列读(即外层循环是关于列的)相比,在输入效率上( E )。 A. 没有区别     B. 有一些区别,但机器处理速度很快,可忽略不计 C. 按行读的方式要高一些     D. 按列读的方式要高一些     E. 取决于数组的存储方式。

这个还是真的要看怎么存的,Pascal在开数组的时候不知道怎么开,但是c++就是一行开下去地址连续的,所以c++在读取的时候还是行优先读要稍微快一点。所以还是取决于地址怎么分配了。

3.1硬件基础

4、(NOIP-2004–T17-多选)下列说法中正确的有( ADE )。 A. CPU 的基本功能就是执行指令。 B. CPU 的主频是指 CPU 在 1 秒内完成的指令周期数,主频越快的 CPU 速度一定越快。 C. 内部构造不同的 CPU 运行相同的机器语言程序,一定会产生不同的结果。 D. 在一台计算机内部,一个内存地址编码对应唯一的一个内存单元。 E. 数据总线的宽度决定了一次传递数据量的大小,是影响计算机性能的因素之一。

B的话主频的定义对的,但是CPU速度还跟其他东西有关;C大部分情况下都是对的但不排除特殊的情况…

7、(NOIP-2005–T7-单选)Intel 的首颗 64 位处理器是( E )。 A. 8088      B. 8086      C. 80386      D. 80486      E. Pentium

这个也是古董了…但由于比较特殊还是记一笔吧…8086是首颗16位的,80386是第一颗32位

10、(NOIP-2005–T18-多选)以下断电之后将不能保存数据的有( BCDE )。 A. 硬盘     B. 寄存器     C. 显存     D. 内存     E. 高速缓存

  • 寄存器、高速缓存、RAM,读取速度很快但是断电后数据会丢失,显存是内存的一种,主要是在显卡和GPU当中处理图像的orz
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!