《NOIP2016提高组C++初赛试题.doc》由会员分享,可在线阅读,更多相关《NOIP2016提高组C++初赛试题.doc(13页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第二十二届全国青少年信息学奥林匹克联赛初赛提高组 C+语言试题竞赛时间:2016 年 10 月 22 日 14:3016:30选手注意选手注意: : 试题纸共有 13 页,答题纸共有 2 页,满分 100 分。请在答题纸上作答,写 在试题纸上的一律无效。 不得使用任何电子设备(如计算器、手机、电子词典等)或查阅任何书籍资料。一、单项选择题一、单项选择题(共共 15 题题,每题每题 1.5 分分,共计共计 22.5 分分;每题有且仅有一个正每题有且仅有一个正 确确 选项选项) 1.以下不是微软公司出品的软件是( )。 . Powerpoint. Word . Excel. Acrobat Rea
2、der2.如果开始时计算机处于小写输入状态,现在有一只小老鼠反复按照 CapsLock、 字母键 A、字母键 S 和字母键 D 的顺序来回按键,即 CapsLock、A、S、D、S、A、CapsLock、A、S、D、S、A、CapsLock、A、S 、D、S、A、,屏幕上输出的第 81 个字符是字母( )。 . A . S . D . A3.二进制数 00101100 和 01010101 异或的结果是( )。 . 00101000 . 01111001 . 01000100 . 001110004. 与二进制小数 0.1 相等的八进进制数是( )。. 0.8 . 0.4 . 0.2 . 0.
3、1 5. 以比较作为基本运算,在 N 个数中找最小数的最少运算次数为( )。 . N . N-1 . N2 . log N6. 表达式 a*(b+c)-d 的后缀表达形式为( )。 . abcd*+- . abc+*d- . abc*+d- . -+*abcd7.一棵二叉树如右图所示,若采用二叉树链表存储该二叉 树(各个结点包括结点的数据、左孩子指针、右孩子指 针)。如果没有左孩子或者右孩子,则对应的为空指针。 那么该链表中空指针的数目为( )。 A. 6 B. 7 C. 12 . 148.G 是一个非连通简单无向图,共有 28 条边,则该图至少有( )个顶点。 . 10 . 9 .8 .7C
4、CF NOIP2016 初赛提高组 C+语言试题 第 1 页,共 13 页9.某计算机的 CPU 和内存之间的地址总线宽度是 32 位(bit),这台计算机 最 多可以使用( )的内存。 A.2GBB.4GBC.8GBD.16GB10. 有以下程序:#include using namespace std;int main() int k = 4, n = 0; while (n 。如果 L 中存在 x i(1 xi+1 . xn, 则称 L 是单峰的,并称 xi 是 L 的 “峰顶”。现在已知 L 是单峰的,请把 a-c 三行代码补全到算法中使得算 法 正确找到 L 的峰顶。 a. Sear
5、ch(k+1, n) b. Search(1, k-1) c. return LkSearch(1, n) 1. k n/2 2. if Lk Lk-1 and Lk Lk+1 3. then _ 4. else if Lk Lk-1 and Lk using namespace std;int main() int a6 = 1, 2, 3, 4, 5, 6; int pi = 0; int pj = 5; int t , i; while (pi using namespace std;int main() char a100100, b100100; string c100; strin
6、g tmp; int n, i = 0, j = 0, k = 0, total_len100, length1003;CCF NOIP2016 初赛提高组 C+语言试题 第 5 页,共 13 页cin n; getline(cin, tmp); for (i = 0; i = lengthi2) cout lengthi1) break; if (j = lengthi2) cout using namespace std;int lps(string seq, int i, int j) int len1, len2; if (i = j) return 1; if (i j) retur
7、n 0; if (seqi = seqj) return lps(seq, i + 1, j - 1) + 2; len1 = lps(seq, i, j - 1); len2 = lps(seq, i + 1, j); if (len1 len2) return len1; return len2; int main() string seq = “acmerandacm“; int n = seq.size(); cout #include using namespace std;int map100100; int sum100, weight100; int visit100;CCF
8、NOIP2016 初赛提高组 C+语言试题 第 7 页,共 13 页int n;void dfs(int node) visitnode = 1; sumnode = 1; int v, maxw = 0; for (v = 1; v maxw) maxw = sumv; if (n - sumnode maxw) maxw = n - sumnode; weightnode = maxw; int main() memset(map, 0, sizeof(map); memset(sum, 0, sizeof(sum); memset(weight, 0, sizeof(weight); m
9、emset(visit, 0, sizeof(visit); cin n; int i, x, y; for (i = 1; i x y; mapxy = 1; mapyx = 1; dfs(1); int ans = n, ansN = 0; for (i = 1; i using namespace std; #define MAXN 200000 #define infinity 2147483647int answerMAXN, heightMAXN, previousMAXN, nextMAXN; int rankMAXN; int n;void sort(int l, int r)
10、 int x = heightrank(l + r) / 2, i = l, j = r, temp; while (i x) j-;if (1) temp = ranki; ranki = rankj; rankj = temp;CCF NOIP2016 初赛提高组 C+语言试题 第 9 页,共 13 页i+; j-; if (i n; int i, higher, shorter; for (i = 1; i heighti; ranki = i;sort(1, n); for (i = 1; i = 2; i-) higher = shorter = infinity; if (prev
11、iousi !=0) shorter = heighti - heightpreviousi; if (nexti != 0)(3)(3)(3) ; ; ; if ( (4)(4)(4) ) ) ) answeri = previousi; else answeri = nexti; nextpreviousi = nexti;(5)(5)(5) ; ; ; for (i = 2; i 1)个城市因地震而 导致交通中断时,首都到多少个城市的最短路径长度会发生改变。如果因为无法通过 第 i 个城市而导致从首都出发无法到达某个城CCF NOIP2016 初赛提高组 C+语言试题第 10 页,共 1
12、3 页市,也认为到达该城市的最短路径长度改变。 对于每一个城市 i,假定只有第 i 个城市与外界交通中断,输出有多少个 城市 会因此导致到首都的最短路径长度改变。 我们采用邻接表的方式存储图的信息,其中 headx表示顶点 x 的第一条 边的 编号,nexti表示第 i 条边的下一条边的编号,pointi表示第 i 条边的终点, weighti表示第 i 条边的长度。(第一空 2 分,其余 3 分)#include #include using namespace std; #define MAXN 6000 #define MAXM 100000 #define infinity 21474
13、83647int headMAXN, nextMAXM, pointMAXM, weightMAXM; int queueMAXN, distMAXN, visitMAXN; int n, m, x, y, z, total = 0, answer;void link(int x,int y,int z) total+; nexttotal = headx; headx = total; pointtotal = y; weighttotal = z; total+; nexttotal = heady; heady = total; pointtotal = x; weighttotal =
14、 z; int main() int i, j, s, t; cin n m; for (i = 1; i x y z; link(x, y, z); for (i = 1; i = n; i+) disti = infinity;(1) ; queue1 = 1; visit1 = 1; s = 1;CCF NOIP2016 初赛提高组 C+语言试题 第 11 页,共 13 页t = 1; / 使用 SPFA 求出第一个点到其余各点的最短路长度 while (s = t) x = queues % MAXN; j = headx; while (j != 0) if (2) distpoin
15、tj = distx + weightj; if (visitpointj = 0) t+; queuet % MAXN = pointj; visitpointj = 1; j = nextj; (3); s+; for (i = 2; i = n; i+) queue1 = 1; memset(visit, 0, sizeof(visit); visit1 = 1; s = 1; t = 1; while (s = t) / 判断最短路长度是否不变 x = queues; j = headx; while (j != 0) if (pointj != i t+; queuet = pointj; j = nextj; s+; answer = 0; for (j = 1; j = n; j+) answer += 1 - visitj; cout i “:“ answer - 1 endl;CCF NOIP2016 初赛提高组 C+语言试题第 12 页,共 13 页 return 0; CCF NOIP2016 初赛提高组 C+语言试 题 第 13 页,共 13 页
限制150内