NOIP2013初赛提高组c试题.doc
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- NOIP2013 初赛 提高 试题
- 资源描述:
-
第十九届全国青少年信息学奥林匹克联赛初赛 提高组 Pascal 语言试题 竞赛时间:2013 年 10 月 13 日 14:30~16:30 选手注意: l 试题纸共有 12 页,答题纸共有 2 页,满分 100 分。请在答题纸上作答,写在试题纸上 的一律无效。 l 不得使用任何电子设备(如计算器、手机、电子词典等)或查阅任何书籍资料。 一、单项选择题(共 15 题,每题 1.5 分,共计 22.5 分;每题有且仅有一个正确 选项) 1. 一个 32 位整型变量占用( )个字节。 A. 4 B. 8 C. 32 D. 128 2. 二进制数 11.01 在十进制下是( )。 A. 3.25 B. 4.125 C. 6.25 D. 11.125 3. 下面的故事与( )算法有着异曲同工之妙。 从前有座山,山里有座庙,庙里有个老和尚在给小和尚讲故事:‚从前有座山,山 里有座庙,庙里有个老和尚在给小和尚讲故事:‘从前有座山,山里有座庙,庙里有个 老和尚给小和尚讲故事....’‛ A. 枚举 B. 递归 C. 贪心 D. 分治 4. 1948 年,( )将热力学中的熵引入信息通信领域,标志着信息论研究的开端。 A. 冯·诺伊曼(John von Neumann) B. 图灵(Alan Turing) C. 欧拉(Leonhard Euler) D. 克劳德·香农(Claude Shannon) 5. 已知一棵二叉树有 2013 个节点,则其中至多有( )个节点有 2 个子节点。 A. 1006 B. 1007 C. 1023 D. 1024 6. 在一个无向图中,如果任意两点之间都存在路径相连,则称其为连通 图。右图是一个有 5 个顶点、8 条边的连通图。若要使它不再是连通 图,至少要删去其中的( )条边。 CCF NOIP2013 初赛提高组C 语言试题 第 12 页,共 12 页 A. 2 B. 3 C. 4 D. 5 7. 斐波那契数列的定义如下:F1 = 1, F2 = 1, Fn = Fn – 1 + Fn – 2 (n ≥ 3)。如果用下面的函数计 算斐波那契数列的第 n 项,则其时间复杂度为( )。 funtion F(n : longint) : longint; begin if n <= 2 then F := 1 else F := F(n - 1) + F(n - 2); end; A. O(1) B. O(n) C. O(n2) D. O(Fn) 8. 二叉查找树具有如下性质:每个节点的值都大于其左子树上所有节点的值、小于其右子 树上所有节点的值。那么,二叉查找树的( )是一个有序序列。 A. 先序遍历 B. 中序遍历 C. 后序遍历 D. 宽度优先遍历 9. 将(2, 6, 10, 17)分别存储到某个地址区间为 0~10 的哈希表中,如果哈希函数 h(x) = ( ),将不会产生冲突,其中 a mod b 表示 a 除以 b 的余数。 A. x mod 11 B. x2 mod 11 C. 2x mod 11 D. ⌊√ ⌋ mod 11,其中⌊√ ⌋表示√ 下取整 10. IPv4 协议使用 32 位地址,随着其不断被分配,地址资源日趋枯竭。因此,它正逐渐被 使用( )位地址的 IPv6 协议所取代。 A. 40 B. 48 C. 64 D. 128 11. 二分图是指能将顶点划分成两个部分,每一部分内的顶点间没有边相连的简单无向图。 那么,12 个顶点的二分图至多有( )条边。 A. 18 B. 24 C. 36 D. 66 12. ( )是一种通用的字符编码,它为世界上绝大部分语言设定了统一并且唯一的二进 制编码,以满足跨语言、跨平台的文本交换。目前它已经收录了超过十万个不同字符。 A. ASCII B. Unicode C. GBK 2312 D. BIG5 13. 把 64 位非零浮点数强制转换成 32 位浮点数后,不可能( )。 A. 大于原数 B. 小于原数 C. 等于原数 D. 与原数符号相反 14. 对一个 n 个顶点、m 条边的带权有向简单图用 Dijkstra 算法计算单源最短路时,如果不 使用堆或其它优先队列进行优化,则其时间复杂度为( )。 A. O(mn + n3) B. O(n2) C. O((m + n) log n) D. O((m + n2) log n) 15. T(n)表示某个算法输入规模为 n 时的运算次数。如果 T(1)为常数,且有递归式 T(n) = 2*T(n / 2) + 2n,那么 T(n) = ( )。 A. Θ(n) B. Θ(n log n) C. Θ(n2) D. Θ(n2 log n) 二、不定项选择题(共 5 题,每题 1.5 分,共计 7.5 分;每题有一个或多个正确 选项,多选或少选均不得分) 1. 下列程序中,正确计算 1, 2, …, 100 这 100 个自然数之和 sum(初始值为 0)的是( )。 A. for (i = 1; i<=100;i++) sum += i; B. i = 1; while (i > 100) { sum += i; i++; } C. i = 1; do { sum += i; i++; } while (i <= 100); D. i = 1; do { sum += i; i++; } while (i > 100); 2. ( )的平均时间复杂度为 O(n log n),其中 n 是待排序的元素个数。 A. 快速排序 B. 插入排序 C. 冒泡排序 D. 归并排序 3. 以 A0 作为起点,对下面的无向图进行深度优先遍历时(遍历的顺序与顶点字母的下标 无关),最后一个遍历到的顶点可能是( )。 A. A1 B. A2 C. A3 D. A4 4. ( )属于 NP 类问题。 A. 存在一个 P 类问题 B. 任何一个 P 类问题 C. 任何一个不属于 P 类的问题 D. 任何一个在(输入规模的)指数时间内能够解决的问题 5. CCF NOIP 复赛考试结束后,因( )提出的申诉将不会被受理。 A. 源程序文件名大小写错误 B. 源程序保存在指定文件夹以外的位置 C. 输出文件的文件名错误 D. 只提交了可执行文件,未提交源程序 三、问题求解(共 2 题,每题 5 分,共计 10 分;每题全部答对得 5 分,没有部 分分) 1. 某系统自称使用了一种防窃听的方式验证用户密码。密码是 n 个数 s1, s2, …, sn,均为 0 或 1。该系统每次随机生成 n 个数 a1, a2, …, an,均为 0 或 1,请用户回答(s1a1 + s2a2 + … + snan)除以 2 的余数。如果多次的回答总是正确,即认为掌握密码。该系统认为,即使 问答的过程被泄露,也无助于破解密码——因为用户并没有直接发送密码。 然而,事与愿违。例如,当 n = 4 时,有人窃听了以下 5 次问答: 问答编号 系统生成的 n 个数 掌握密码的用户的回答 a1 a2 a3 a4 1 1 1 0 0 1 2 0 0 1 1 0 3 0 1 1 0 0 4 1 1 1 0 0 5 1 0 0 0 0 就破解出了密码 s1 = ,s2 = ,s3 = ,s4 = 。 2. 现有一只青蛙,初始时在 n 号荷叶上。当它某一时刻在 k 号荷叶上时,下一时刻将等概 率地随机跳到 1, 2, …, k 号荷叶之一上,直至跳到 1 号荷叶为止。当 n = 2 时,平均一共 跳 2 次;当 n = 3 时,平均一共跳 2.5 次。则当 n = 5 时,平均一共跳 次。 1 2 3 4 5 四、阅读程序写结果(共 4 题,每题 8 分,共计 32 分) 1. #include <stdio.h> #include <string.h> const int SIZE = 100; int main() { int n, i, isPlalindrome; char str[SIZE]; scanf("%s", str); n = strlen(str); isPlalindrome = 1; for (i = 0; i < n/2; i++) { if (str[i] != str[n-i-1]) isPlalindrome = 0; } if (isPlalindrome) printf("Yes\n"); else printf("No\n"); return 0; } 输入:abceecba 输出:_________ 2. #include <stdio.h> int main() { int a, b, u, v, i, num; scanf("%d%d%d%d", &a, &b, &u, &v); num = 0; for (i = a; i <= b; i++) if (((i % u) == 0) || ((i % v) == 0)) num++; printf("%d\n", num); return 0; } 输入:1 1000 10 15 输出:_________ 3. #include <stdio.h> const int SIZE = 100; int main() { int height[SIZE], num[SIZE], n, ans; int i, j; scanf("%d", &n); for (i = 0; i < n; i++) { scanf("%d", &height[i]); num[i] = 1; for (j = 0; j < i; j++) { if ((height[j] < height[i]) && (num[j] >= num[i])) num[i] = num[j]+1; } } ans = 0; for (i = 0; i < n; i++) { if (num[i] > ans) ans = num[i]; } printf("%d\n", ans); return 0; } 输出: 8 3 2 5 11 12 7 4 10 输出:_________ 4. #include <stdio.h> #include <string.h> #define SIZE 100 int n, m, p, count; int a[SIZE][SIZE]; void colour(int x, int y) { count++; a[x][y] = 1; if ((x > 1) && (a[x - 1][y] == 0)) colour(x - 1, y); if ((y > 1) && (a[x][y - 1] == 0)) colour(x, y - 1); if ((x < n) && (a[x + 1][y] == 0)) colour(x + 1, y); if ((y < m) && (a[x][y + 1] == 0)) colour(x, y + 1); } int main() { int i, j, x, y, ans; memset(a, 0, sizeof(a)); scanf("%d%d%d", &n, &m, &p); for (i = 1; i <= p; i++) { scanf("%d%d", &x, &y); a[x][y] = 1; } ans = 0; for (i = 1; i <= n; i++) for (j = 1; j <= m; j++) if (a[i][j] == 0) { count = 0; colour(i, j); if (ans < count) ans = count; } printf("%d\n", ans); return 0; } 输入: 6 5 9 1 4 2 3 2 4 3 2 4 1 4 3 4 5 5 4 6 4 输出:________ 五、完善程序(第 1 题 15 分,第 2 题 13 分,共计 28 分) 1. (序列重排)全局数组变量 a 定义如下: #define SIZE 100 int a[SIZE], n; 它记录着一个长度为 n 的序列 a[1], a[2], …, a[n]。 现在需要一个函数,以整数 p (1 ≤ p ≤ n)为参数,实现如下功能:将序列 a 的前 p 个数与后 n – p 个数对调,且不改变这 p 个数(或 n – p 个数)之间的相对位置。例如, 长度为 5 的序列 1, 2, 3, 4, 5,当 p = 2 时重排结果为 3, 4, 5, 1, 2。 有一种朴素的算法可以实现这一需求,其时间复杂度为 O(n)、空间复杂度为 O(n): void swap1(int p) { int i, j, b[SIZE]; for (i = 1; i <= p; i++) b[ (1) ] = a[i]; //(2分) for (i = p + 1; i <= n; i++) b[i - p] = a[i]; for (i = 1; i <= n; i++) a[i] = b[i]; } 事实上,还有一种更好的算法,时间复杂度为 O(n)、空间复杂度为 O(1): void swap2(int p) { int i, j, temp; for (i = p + 1; i <= n; i++) { temp = a[i]; for (j = i; j >= (2) j--) //(2分) a[j] = a[j - 1]; (3) = temp; //(2分) } } 事实上,还有一种更好的算法,时间复杂度为O(n)、空间复杂度为O(1): void swap3(int p) { int start1, end1, start2, end2, i, j, temp; start1 = 1; end1 = p; start2 = p + 1; end2 = n; while (true) { i = start1; j = start2; while ((i <= end1) && (j <= end2)) { temp = a[i]; a[i] = a[j]; a[j] = temp; i++; j++; } if (i <= end1) start1 = i; else if ( (4) ) { //(3分) start1 = (5) //(3分) end1 = (6) //(3分) start2 = j; } else break; } } 2. (两元序列)试求一个整数序列中,最长的仅包含两个不同整数的连续子序列。如有多 个子序列并列最长,输出任意一个即可。例如,序列“1 1 2 3 2 3 2 3 3 1 1 1 3 1”中, 有两段满足条件的最长子序列,长度均为 7,分别用下划线和上划线标出。 #include <stdio.h> int main() { const int SIZE = 100; int n, i, j, a[SIZE], cur1, cur2, count1, count2, ans_length, ans_start, ans_end; //cur1, cur2分别表示当前子序列中的两个不同整数 //count1, count2分别表示cur1, cur2在当前子序列中出现的次数 scanf("%d", &n); for (i = 1; i <= n; i++) scanf("%d", &a[i]); i = 1; j = 1; //i, j分别表示当前子序列的首尾,并保证其中至多有两个不同整数 while ((j <= n) && (a[j] == a[i])) j++; cur1 = a[i]; cur2 = a[j]; count1 = (1) //(3分) count2 = 1; ans_length = j - i + 1; while (j < n) { j++; if (a[j] == cur1) count1++; else if (a[j] == cur2) count2++; else { if (a[j - 1] == (2) ) { //(3分) while (count2 > 0) { if (a[i] == cur1) count1--; else count2--; i++; } cur2 = a[j]; count2 = 1; } else { while (count1 > 0) { if (a[i] == cur1) (3) //(2分) else (4) //(2分) i++; } (5) //(3分) count1 = 1; } } if (ans_length < j - i + 1) { ans_length = j - i + 1; ans_start = i; ans_end = j; } } for (i = ans_start; i <= ans_end; i++) printf("%d ", a[i]); return 0; } NOIP2013 初赛提高组(Pascal语言)试题参考解答 一、单项选择 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 A A B D A B D B D D C B D B B 二、多项选择 1 2 3 4 5 AC AD CD AB ABCD 三、解答题 1. 0 1 1 1 2. 37/12 求解方法为: 先将问题转为青蛙随机跳了一步以后的情况,分为5种情况,分别是落在1号、2号、3号、4号、5号荷叶上,于是有 f5=(f1 + 1+f2+ 1+f3+ 1+f4 +1+f5) / 5 ,从而推得 f5=1+(f1+f2+f3+f4)/4。 推而广之,求fn的递推式为: f[1]=1 f[n]=1+(f[1]+f[2]+…+f[n-1])/(n-1) (n>1) 四、阅读程序题 (1)Yes 判定输入的字符串是否是回文串 (2)133 1到1000中是10或15的倍数的数的个数 (3)4 最长上升子序列的长度 (4)7 图中最长通路的长度 五、完成程序题 1.(1) n+i-p (2) i+1-p (3) a[i-p] (4) j<=end2 (5) i (6) J-1(或start2-1) 2、(1)j-1 (2) cur1 (3) dec(count1) (4) dec(count2) (5) cur1:=a[j]展开阅读全文
咨信网温馨提示:1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。




NOIP2013初赛提高组c试题.doc



实名认证













自信AI助手
















微信客服
客服QQ
发送邮件
意见反馈



链接地址:https://www.zixin.com.cn/doc/2626277.html