收藏 分享(赏)

NOIP2012-初赛提高组C++试题及答案.pdf

上传人:weiwoduzun 文档编号:3611830 上传时间:2018-11-13 格式:PDF 页数:16 大小:1.25MB
下载 相关 举报
NOIP2012-初赛提高组C++试题及答案.pdf_第1页
第1页 / 共16页
NOIP2012-初赛提高组C++试题及答案.pdf_第2页
第2页 / 共16页
NOIP2012-初赛提高组C++试题及答案.pdf_第3页
第3页 / 共16页
NOIP2012-初赛提高组C++试题及答案.pdf_第4页
第4页 / 共16页
NOIP2012-初赛提高组C++试题及答案.pdf_第5页
第5页 / 共16页
点击查看更多>>
资源描述

1、CCF NOIP2012 初赛 提高组 C+ 1 第十 八届全国青少年信息学奥林匹克联赛 初赛 提高组 C+语言 试题 竞赛时间: 2012 年 10 月 13 日 14:3016:30 选手 注意: 试题 纸 共有 15 页, 答题纸 共有 2 页 ,满分 100 分 。 请在 答题纸 上作答,写在 试题 纸 上的一律无效。 不得 使用 任何电子设备(如 计算器、手机、电子词典等)或查阅 任何书籍资料 。一、单项选择题(共 10 题,每题 1.5 分,共计 15 分 ; 每题有且仅有一个正确 选项 ) 1. 目前计算机芯片(集成电路)制造的主要原料是( ),它是一种可以在沙子中提炼出的物质。

2、A. 硅 B. 铜 C. 锗 D. 铝 2. ( )是主要用于显示网页服务器或者文件系统的 HTML 文件内容,并让用户与这些文件交互的一种软件。A. 资源管理器 B. 浏览器 C. 电子邮件 D. 编译器 3. 目前个人电脑的( )市场占有率最靠前的厂商包括 Intel、 AMD 等公司。A. 显示器 B. CPU C. 内存 D. 鼠标 4. 无论是 TCP/IP 模型还是 OSI 模型,都可以视为网络的分层模型,每个网络协议都会被归入某一层中。如果用现实生活中的例子来比喻这些 “ 层 ” ,以下最恰当的是( )。A. 中国公司的经理与 缅甸 公司的经理交互商业文件 第 4 层 中国公司经

3、理 缅甸 公司经理 第 3 层 中国公司经理秘书 缅甸 公司经理秘书 第 2 层 中国公司翻译 缅甸 公司翻译 第 1 层 中国邮递员 缅甸 邮递员 CCF NOIP2012 初赛 提高组 C+ 2 B. 军队发布命令 第 4 层 司令 第 3 层 军长 1 军长 2 第 2 层 师长 1 师长 2 师长 3 师长 4 第 1 层 团长 1 团长 2 团长 3 团长 4 团长 5 团长 6 团长 7 团长 8 C. 国际会议中,每个人都与他国地位对等的人直接进行会谈 第 4 层 英国女王 瑞典国王 第 3 层 英国首相 瑞典首相 第 2 层 英国外交大臣 瑞典外交大臣 第 1 层 英国驻瑞典大

4、使 瑞典驻英国大使 D. 体育比赛中,每一级比赛的优胜者晋级上一级比赛 第 4 层 奥运会 第 3 层 全运会 第 2 层 省运会 第 1 层 市运会 5. 如果不在快速排序中引入随机化,有可能导致的后果是( )。A. 数组访问越界 B. 陷入死循环 C. 排序结果错误 D. 排序时间退化为平方级 6. 1946 年诞生于美国宾夕法尼亚大学的 ENIAC 属于( )计算机。A. 电子管 B. 晶体管 C. 集成电路 D. 超大规模集成电路 7. 在程序运行过程中,如果递归调用的层数过多,会因为( )引发错误。A. 系统分配的 栈 空间溢出 B. 系统分配的 堆 空间溢出 CCF NOIP201

5、2 初赛 提高组 C+ 3 C. 系统分配的 队列 空间溢出 D. 系统分配的 链表 空间溢出 8. 地址总线的位数决定了 CPU 可直接寻址的内存空间大小, 例 如地址总线为 16 位,其最大的可寻址空间为 64KB。如果地址总线是 32 位,则理论上最大可寻址的内存空间为( )。 A. 128KB B. 1MB C. 1GB D. 4GB 9. 以下 不属于目前 3G(第三代移动通信技术)标准的是( )。A. GSM B. TD-SCDMA C. CDMA2000 D. WCDMA 10. 仿生学的问世开辟了独特的科学技术发展道路。人们研究生物体的结构、功能和工作原理,并将这些原理移植于新

6、兴的工程技术之中。以下关于仿生学的叙述,错误的是( )。 A. 由研究蝙蝠,发明雷达 B. 由研究蜘蛛网,发明因特网 C. 由研究海豚,发明声纳 D. 由研究电鱼,发明伏特电池 二 、 不定 项选择题(共 10 题,每题 1.5 分,共计 15 分 ;每题有一个或多个正确选项, 多选或少选均不得分 ) 1. 如果对于所有规模为 n 的输入,一个算法均恰好进行( )次运算,我们可以说该算法的时间复杂度为 O(2n)。A. 2n+1 B. 3n C. n*2n D. 22n2. 从顶点 A0出发,对有向图( )进行广度优先搜索( BFS)时,一种可能的遍历顺序是 A0, A1, A2, A3, A

7、4。图 A 图 B CCF NOIP2012 初赛 提高组 C+ 4 图 C 图 D 3. 如果一个栈初始时为空,且当前栈中的元素从栈底到栈顶依次为a, b, c(如右图所示),另有元素 d已经出栈,则可能的入栈顺序有( )。A. a, b, c, d B. b, a, c, d C. a, c, b, d D. d, a, b, c 4. 在计算机显示器所使用的 RGB 颜色模型中,( )属于三原色之一。A. 黄色 B. 蓝色 C. 紫色 D. 绿色 5. 一棵二叉树一共有 19 个节点,其叶子节点可能有( )个。A. 1 B. 9 C. 10 D. 11 6. 已知带权有向图 G 上的所有

8、权值均为正整数,记顶点 u 到顶点 v 的最短路径的权值为d(u, v)。若 v1, v2, v3, v4, v5是图 G 上的顶点,且它们之间两两都存在路径可达,则 以下说法正确的有( )。A. v1到 v2的最短路径可能包含一个环B. d(v1, v2) = d(v2, v1) C. d(v1, v3) d(v1, v2) + d(v2, v3) D. 如果 v1 v2 v3 v4 v5是 v1到 v5的一条最短路径 , 那么 v2 v3 v4是 v2到 v4的一条最短路径 7. 逻辑异或( )是一种二元运算,其真值表如下所示。a b a b False False False False

9、 True True True False True True True False 以下关于逻辑异或的性质,正确的有( )。 A. 交换律 : a b = b a 栈顶 c b 栈底 a CCF NOIP2012 初赛 提高组 C+ 5 B. 结合律 : (a b) c = a (b c) C. 关于逻辑与的分配律 : a (b c) = (a b) (a c) D. 关于逻辑或的分配律 : a (b c) = (a b) (a c) 8. 十进制下的无限循环小数(不包括循环节内的数字均为 0 或均为 9 的平凡情况),在二进制下有可能是( )。A. 无限循环小数 (不包括循环节内的数字均为

10、 0 或均为 1 的平凡情况) B. 无限不循环小数 C. 有限小数 D. 整数 9. 以下( )属于互联网上的 E-mail 服务协议。A. HTTP B. FTP C. POP3 D. SMTP 10. 以下关于计算复杂度的说法中,正确的有( )。A. 如果一个问题不存在多项式 时间 的算法,那它一定 是 NP 类问题 B. 如果一个问题不存在多项式 时间 的算法,那它一定 不是 P 类问题 C. 如果一个问题不存在多项式 空间 的算法,那它一定 是 NP 类问题 D. 如果一个问题不存在多项式 空间 的算法,那它一定 不是 P 类问题 三、 问题求解(共 2 题,每 题 5 分,共计 1

11、0 分) 1. 本题中,我们约定布尔表达式只能包含 p, q, r 三个布尔变量,以及 “ 与 ” ( )、 “ 或 ”( )、 “ 非 ” ( )三种布尔运算。如果无论 p, q, r 如何取值,两个布尔表达式的值总是相同,则称它们等价。例如, (p q) r 和 p (q r)等价, p p 和 q q 也等价;而 p q 和 p q 不等价。那么,两两不等价的布尔表达式最多有 _个。2. 对 于一 棵二叉树 ,独立集是 指 两两互不相邻的 节 点构成的集合。例如,图 1 有 5 个不同的独立集( 1 个双点集合、 3 个单点集合、 1 个空集),图 2 有 14 个不同的独立集。那么,图

12、 3 有 _个不同的独立集。图 1 图 2 图 3 CCF NOIP2012 初赛 提高组 C+ 6 四 、阅读程序写结果(共 4 题,每题 8 分, 其中第 3 题 的 2 个 小题各 4 分, 共计 32 分) 1. #include using namespace std;int n, i, temp, sum, a100; int main() cinn; for (i = 1; i ai; for (i = 1; i ai + 1) temp = ai; ai = ai + 1; ai + 1 = temp; for (i = n; i = 2; i-) if (ai using n

13、amespace std;int n, i, ans; int gcd(int a, int b) if (a % b = 0) return b; else return gcd(b, a%b); int main() cinn; ans = 0; for (i = 1; i using namespace std;const int SIZE = 20; int dataSIZE; int n, i, h, ans; void merge() datah-1 = datah-1 + datah; h-; CCF NOIP2012 初赛 提高组 C+ 8 ans+; int main() c

14、inn; h = 1; datah = 1; ans = 0; for (i = 2; i 1 cout#include using namespace std;int lefts20, rights20, father20; string s1, s2, s3; int n, ans; void calc(int x, int dep) ans = ans + dep*(s1x - A + 1); if (leftsx = 0) calc(leftsx, dep+1); if (rightsx = 0) calc(rightsx, dep+1); CCF NOIP2012 初赛 提高组 C+

15、 9 void check(int x) if (leftsx = 0) check(leftsx); s3 = s3 + s1x; if (rightsx = 0) check(rightsx); void dfs(int x, int th) if (th = n) s3 = “; check(0); if (s3 = s2) ans = 0; calc(0, 1); cout= 0) CCF NOIP2012 初赛 提高组 C+ 10 dfs(fatherx, th); int main() cins1; cins2; n = s1.size(); memset(lefts, -1, s

16、izeof(lefts); memset(rights, -1, sizeof(rights); memset(father, -1, sizeof(father); dfs(0, 1); 输 入: ABCDEF BCAEDF 输出 : _五、完善程序 ( 第 1 题第 2 空 3 分 , 其余 每空 2.5 分 , 共计 28 分 ) 1. (排列数) 输入两个正整数 n, m (1 n 20, 1 m n),在 1n 中任取 m 个数,按字典序从小到大输出所有这样的排列。例如输入: 3 2输出: 1 21 3 2 1 2 3 3 1 3 2 #include #include using

17、namespace std; const int SIZE = 25; bool usedSIZE; int dataSIZE; CCF NOIP2012 初赛 提高组 C+ 11 int n, m, i, j, k; bool flag; int main() cinnm; memset(used, false, sizeof(used); for (i = 1; i = 1; i-) ;for (j = datai+1; j 2是一个固定的正整数,表示壳的厚度。小 Z 还希望,每次操作,无论是压入、弹出还是翻转,都仅用与 c 无关的常数时间完成。聪明的你能帮助她编程实现 “ 新壳栈 ” 吗

18、?程序期望的实现效果如以下两表所示。其中,输入的第一行是正整数 c,之后每行输入都是一条指令。另外,如遇弹出操作时栈为空,或翻转操作时栈中元素不足 c 个,应当输出相应的错误信息。 指令 涵义 1空格 e 在栈顶压入元素 e2 弹出(并输出)栈顶元素 3 翻转栈顶的前 c 个元素0 退出 表 1:指令的涵义输入 输出 栈中的元素 (左为栈底,右为栈顶) 说明 3 输入正整数 c1 1 1 压入元素 11 2 1 2 压入元素 21 3 1 2 3 压入元素 31 4 1 2 3 4 压入元素 43 1 4 3 2 翻转栈顶的前 c 个元素1 5 1 4 3 2 5 压入元素 53 1 4 5

19、2 3 翻转栈顶的前 c 个元素2 3 1 4 5 2 弹出栈顶元素 32 2 1 4 5 弹出栈顶元素 22 5 1 4 弹出栈顶元素 53 错误信息 1 4 由于栈中元素不足 c 个,无法翻转,故操CCF NOIP2012 初赛 提高组 C+ 13 作失败,输出错误信息 2 4 1 弹出栈顶元素 42 1 空 弹出栈顶元素 12 错误信息 空 由于栈为空,无法弹出栈顶元素,故操作失败,输出错误信息 0 空 退出 表 2:输入输出样例#include using namespace std; const int NSIZE = 100000, CSIZE = 1000; int n, c,

20、r, tail, head, sNSIZE, qCSIZE; /数组 s模拟一个栈, n为栈的元素个数/数组 q模拟一个循环队列, tail为队尾的下标, head为队头的下标bool direction, empty; int previous(int k) if (direction) return (k + c - 2) % c) + 1; else return (k % c) + 1; int next(int k) if (direction) ;else return (k + c - 2) % c) + 1; void push() CCF NOIP2012 初赛 提高组 C+

21、 14 int element; cinelement; if (next(head) = tail) n+; ;tail = next(tail); if (empty) empty = false; else head = next(head); = element; void pop() if (empty) cout 0) tail = previous(tail); = sn;n-; void reverse() int temp; CCF NOIP2012 初赛 提高组 C+ 15 if ( = tail) direction = !direction; temp = head; head = tail; tail = temp; else coutc; n = 0; tail = 1; head = 1; empty = true; direction = true; do cinr; switch (r) case 1: push(); break; case 2: pop(); break; case 3: reverse(); break; while (r != 0); return 0;

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 网络科技 > C/C++资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报