《NOIP初赛普及组C试题[参考]》由会员分享,可在线阅读,更多相关《NOIP初赛普及组C试题[参考](8页珍藏版)》请在金锄头文库上搜索。
1、第 二 十 三 届 全 国 青 少 年 信 息 学 奥 林 匹 克 联 赛 初 赛 普及组 C+语言试题 竞赛时间: 2017 年 10 月 14 日 14:3016:30 选手注意: 0 试题纸共有 7 页,答题纸共有 2 页,满分 100 分。请在答题纸上作答,写在试题纸上 的一律无效。 0 不得使用任何电子设备(如计算器、手机、电子词典等)或查阅任何书籍资料。 一、单项选择题(共 20 题,每题分,共计 30 分;每题有且仅有一个正确选项) 1. 在 8 位二进制补码中,表示的数是十进制下的()。 A. 43 B. -85 C. -43 D. -84 2. 计算机存储数据的基本单位是()
2、。 A. bit B. Byte C. GB D. KB 3.下列协议中与电子邮件无关的是()。 A. POP3 B. SMTP C. WTO D. IMAP 4. 分辨率为 800 x600、16 位色的位图,存储图像信息所需的空间为()。 A. B. C. 4320KB D. 2880KB 5. 计算机应用的最早领域是()。 A. 数值计算B. 人工智能C. 机器人D. 过程控制 6.下列不属于面向对象程序设计语言的是()。 A.CB.C+C. JavaD. C# 7. NOI 的中文意思是()。 A.中国信息学联赛B. 全国青少年信息学奥林匹克竞赛 C.中国青少年信息学奥林匹克竞赛D.
3、中国计算机协会 8. 2017 年 10 月 1 日是星期日, 1999 年 10 月 1 日 是()。 A.星期三B.星期日C. 星期五D. 星期二 9.甲、乙、丙三位同学选修课程,从 4 门课程中,甲选修 2 门,乙、丙各选修 3 门,则不同的选修方案共有()种。 CCF NOIP2017 初赛普及组 C+语言试题 第 1 页,共 7 页 A .36B. 48C.96D. 192 10. 设 G 是有 n 个结点、m 条边(n m )的连通图,必须删去 G 的()条 边,才能使得 G 变成一棵树。 A. m n + 1B. m - nC. m + n + 1 D. n m + 1 11.
4、对于给定的序列 ak ,我们把 (i, j) 称为逆序对当且仅当 i aj。 那么 序列 1, 7, 2, 3, 5, 4 的逆序对 数为()个。 A .4B. 5C.6D. 7 12. 表达式 a * (b + c) * d 的后缀形式 是()。 A. a b c d * + * B. a b c + * d * C. a * b c + * d D. b + c * a * d 13. 向一个栈顶指针为 hs 的链式栈中插入一个指针 s 指向的结点时,应执行()。 A.hs-next = s; B.s-next = hs; hs = s; C.s-next = hs-next; hs-ne
5、xt = s; D.s-next = hs; hs = hs-next; 14. 若串 S = “copyright ”,其子串的个数是 ()。 A.72B. 45C. 46D.36 15.十进制小数对应的二进制数是()。 A.B. C.D. 16. 对于入栈顺序为 a, b, c, d, e, f, g 的序列, 下列()不可能是合法的出栈序 列。 A. a, b, c, d, e, f, gB. a, d, c, b, e, g, f C. a, d, b, c, g, f, eD. g, f, e, d, c, b, a 17. 设 A 和 B 是两个长为 n 的有序数组,现在需要将 A
6、 和 B 合并成一个排好 序的数组,任何以元素比较作为基本运算的归并算法在最坏情况下至少要做 ()次比较。 A . n 2 B.n log nC.2nD. 2n - 1 18.从()年开始, NOIP 竞赛将不再支持 Pascal 语言。 A .2020B.2021C.2022D.2023 19. 一家四口人,至少两个人生日属于同一月份的概率是()(假定每个人生 日属于每个月份的概率相同且不同人之间相互独立)。 A. 1/12 B. 1/144 C. 41/96 D. 3/4 CCF NOIP2017 初赛普及组 C+语言试题 第 2 页,共 7 页 20. 以下和计算机领域密切相关的奖项是(
7、)。 A. 奥斯卡奖B. 图灵奖C. 诺贝尔奖D. 普利策奖 二、问题求解(共 2 题,每题 5 分,共计 10 分) 1.一个人站在坐标( 0, 0 )处,面朝 x 轴正方向。 第一轮,他向前走 1 单位距离,然后右转;第二 轮,他向前走 2 单位距离,然后右转;第三轮, 他向前走 3 单位距离,然后右转他一直这么 走下去。请问第 2017 轮后,他的坐标是: (_,_)。(请在答题纸上 用逗号隔开两空答案) 2.如右图所示,共有 13 个格子。对任何一个格子进行 一次操作,会使得它自己以及与它上下左右相邻的格 子中的数字改变(由 1 变 0 ,或由 0 变 1 )。现在 要使得所有的格子中
8、的数字都变为 0 ,至少需要 _ 次操作。 三、阅读程序写结果(共 4 题,每题 8 分,共计 32 分) 1.#include using namespace std; int main() int t256; string s; int i; cin s; for (i = 0; i 256; i+) ti = 0; for (i = 0; i (); i+) tsi+; for (i = 0; i (); i+) if (tsi = 1) cout si endl; return 0; cout no endl; return 0; CCF NOIP2017 初赛普及组 C+语言试题 第
9、 3 页,共 7 页 输入: xyzxyw 输出: _ 2.#include using namespace std; int g(int m, int n, int x) int ans = 0; int i; if (n = 1) return 1; for (i = x; i m n; cout g(m, n, 0) endl; return 0; 输入: 7 3 输出: _ 3.#include using namespace std; int main() string ch; int a200; int b200; int n, i, t, res; cin ch; n = ();
10、 for (i = 0; i 200; i+) bi = 0; for (i = 1; i 0; i-) if (ai = 0) t+; if (bi - 1 + t res) res = bi - 1 + t; cout res endl; return 0; 输入: 输出: _ 4.#include using namespace std; int main() int n, m; cin n m; int x = 1; int y = 1; int dx = 1; int dy = 1; int cnt = 0; while (cnt != 2) cnt = 0; x = x + dx;
11、 y = y + dy; if (x = 1 | x = n) +cnt; dx = -dx; if (y = 1 | y = m) +cnt; dy = -dy; cout x y endl; return 0; 输入 1 :4 3 CCF NOIP2017 初赛普及组 C+语言试题 第 5 页,共 7 页 输出 1 :_(3 分) 输入 2 :2017 1014 输出 2 :_(5 分) 四、完善程序(共 2 题,每题 14 分,共计 28 分) 1.(快速幂) 请完善下面的程序,该程序使用分治法求x p mod m的值。 (第一空 2 分,其余 3 分) 输入:三个不超过 10000 的
12、正整数 x ,p,m 。 输出: x p mod m 的值。 提示:若 p 为偶数, x p=(x2)p/2 ;若 p 为奇数, x p=x*(x2)(p-1)/2 。 #include using namespace std; int x, p, m, i, result; int main() cin x p m; result =(1); while (2) if (p % 2 = 1) result =(3); p /= 2; x =(4); cout (5) endl; return 0; 2.(切割绳子) 有 n 条绳子,每条绳子的长度已知且均为正整数。绳子可以以 任意正整数长度切
13、割,但不可以连接。现在要从这些绳子中切割出 m 条长度 相同的绳段,求绳段的最大长度是多少。(第一、二空分,其余 3 分) 输入:第一行是一个不超过 100 的正整数 n ,第二行是 n 个不超过 10 6 的正整数,表示每条绳子的长度,第三行是一个不超过 10 8 的正整数 m。 输出:绳段的最大长度,若无法切割,输出 Failed 。 #include using namespace std; int n, m, i, lbound, ubound, mid, count; int len100; / 绳子长度 CCF NOIP2017 初赛普及组 C+语言试题 第 6 页,共 7 页 int main() cin n; count = 0; for (i = 0; i leni; (1); cin m; if (2) cout Failed endl; return 0; lbound = 1; ubound = 1000000; while (3) mid =(4); count = 0; for (i = 0; i n; i+) (5); if (count m) ubound = mid - 1; else lbound = mid; cout lbound endl; return 0; CCF NOIP2017 初赛普及组 C+语言试题 第 7 页,共 7 页