NOIP2018初赛普及组原题&题解

原题&答案

普及组C++语言试题:

普及组答案:

题解

单项选择题

第\(1\)题

以下哪一种设备属于输出设备:( )

\(A.\text{扫描仪}\)

\(B.\text{键盘}\)

\(C.\text{鼠标}\)

\(D.\text{打印机}\)

答案:\(D\),打印机属于输出设备。


第\(2\)题

下列四个不同进制的数中,与其它三项数值上不相等的是( )。

\(A. (269)_{16}\)

\(B. (617)_{10}\)

\(C. (1151)_{8}\)

\(D. (1001101011)_{2}\)

答案:\(D\),计算。


第\(3\)题

\(1\text{MB}\)等于( )。

\(A. 1000 字节\)

\(B. 1024 字节\)

\(C. 1000 X 1000 字节\)

\(D. 1024 X 1024 字节\)

答案:\(D\),\(1\text{MB}=2^{20}\text{Byte}\)。


第\(4\)题

广域网的英文缩写是( )。

\(A. LAN\)

\(B. WAN\)

\(C. MAN\)

\(D. LNA\)

答案:\(B\),广域网(\(\text{Wide Area Network}\))的缩写是\(WAN\)。


第\(5\)题

中国计算机学会于( )年创办全国青少年计算机程序设计竞赛。

\(A. 1983\)

\(B. 1984\)

\(C. 1985\)

\(D. 1986\)

答案:\(B\),1984年***指出:“计算机的普及要从娃娃做起。”因此,教育部和中国科协委托中国计算机学会举办了全国青少年计算机程序设计竞赛。


第\(6\)题

如果开始时计算机处于*写输入状态,现在有一只*老鼠反复按照CapsLock、字母键\(A\)、字母键\(S\)、字母键\(D\)、字母键\(F\)的顺序循环按键,即CapsLock、A、S、D、F、CapsLock、A、S、D、F、……,屏幕上输出的第\(81\)个字符是字母( )。

\(A. A\)

\(B. S\)

\(C. D\)

\(D. a\)

答案:\(A\),模拟可得结果为\(A\)。


第\(7\)题

根节点深度为\(0\),一棵深度为\(h\)的满\(k(k>1)\)叉树,即除最后一层无任何子节点外,每一层上的所有结点都有\(k\)个子结点的树,共有( )个结点。

\(A. (k^{h+1}-1)/(k-1)\)

\(B. k^{h-1}\)

\(C. k^{h}\)

\(D. (k^{h-1})/(k-1)\)

答案:\(A\):

根据推理得出总的节点数$$S=\sum{h}_{i=0}ki$$

再根据等比数列求和公式得:$$S=1\times\frac{1-q{n}}{1-q}=\frac{1-k{h+1}}{1-k}=\frac{k^{h+1}-1}{k-1},q=k$$。


第\(8\)题

以下排序算法中,不需要进行关键字比较操作的算法是( )。

\(A. 基数排序\)

\(B. 冒泡排序\)

\(C. 堆排序\)

\(D. 直接插入排序\)

答案:\(A\)。


第\(9\)题

给定一个含\(N\)个不相同数字的数组,在最坏情况下,找出其中最大或最*的数,至少需要\(N-1\)次比较操作。则最坏情况下,在该数组中同时找最大与最*的数至少需要( )次比较操作。(\(⌈ ⌉\)表示向上取整,\(⌊ ⌋\)表示向下取整)

\(A. ⌈3N / 2⌉ - 2\)

\(B. ⌊3N / 2⌋ - 2\)

\(C. 2N - 2\)

\(D. 2N - 4\)

答案:\(A\)。


第\(10\)题

下面的故事与( )算法有着异曲同工之妙。从前有座山,山里有座庙,庙里有个老和尚在给*和尚讲故事:“从前有座山,山里有座庙,庙里有个老和尚在给*和尚讲故事:‘从前有座山,山里有座庙,庙里有个老和尚给*和尚讲故事……’”

\(A. 枚举\)

\(B. 递归\)

\(C. 贪心\)

\(D. 分治\)

答案:\(B\)。


第\(11\)题

由四个没有区别的点构成的简单无向连通图的个数是( )。

\(A. 6\)

\(B. 7\)

\(C. 8\)

\(D. 9\)

答案:\(A\)。

如下:


第\(12\)题

设含有\(10\)个元素的集合的全部子集数为\(S\),其中由\(7\)个元素组成的子集数为\(T\),则\(T/S\)的值为( )。

\(A. 5 / 32\)

\(B. 15 / 128\)

\(C. 1 / 8\)

\(D. 21 / 128\)

答案:\(B\)。\(T=120,S=1024\)。


第\(13\)题

\(10000\)以内,与\(10000\)互质的正整数有( )个。

\(A. 2000\)

\(B. 4000\)

\(C. 6000\)

\(D. 8000\)

答案:\(B\)。


第\(14\)题

为了统计一个非负整数的二进制形式中 1 的个数,代码如下:

  1. int CountBit(int x)
  2. {
  3. int ret = 0;
  4. while (x)
  5. {
  6. ret++;
  7. ___________;
  8. }
  9. return ret;
  10. }

则空格内要填入的语句是( )。

\(A. x>>1\)

\(B. x\&=x-1\)

\(C. x|=x>>1\)

\(D. x<<1\)

答案:\(B\)。


第\(15\)题

下图中所使用的数据结构是( )。

\(A. 哈希表\)

\(B. 栈\)

\(C. 队列\)

\(D. 二叉树\)

答案:\(B\)。


问题求解

第\(1\)题

甲乙丙丁四人在考虑周末要不要外出郊游。已知①如果周末下雨,并且乙不去,则甲一定不去;②如果乙去,则丁一定去;③如果丙去,则丁一定不去;④如果丁不去,而且甲不去,则丙一定不去。如果周末丙去了,则甲________(去了/没去),乙________(去了/没去),丁________(去了/没去),周末________(下雨/没下雨)。

因为丙去了,由③知:丁没去

因为丁没去,由②知:乙没去

因为丁没去,丙去了,由④知:甲去了

因为甲去了,乙没去,由①知:周末没下雨


第\(2\)题

从\(1\)到\(2018\)这\(2018\)个数中,共有__________个包含数字 8 的数。

\(544\)个。


阅读程序写结果

第\(1\)题

  1. #include <cstdio>
  2. char st[100];
  3. int main() {
  4. scanf("%s", st);
  5. for (int i = 0; st[i]; ++i) {
  6. if ('A' <= st[i] && st[i] <= 'Z')
  7. st[i] += 1;
  8. }
  9. printf("%s\n", st);
  10. return 0;
  11. }

输入:QuanGuoLianSai

输出:_________

阅读程序可知,此程序的作用是:

  1. 将大写字母的ASCII码增加\(1\),如\(Q → R,G → H\);
  2. 将*写字母或其他字符原样输出。

所以结果是:RuanHuoMianTai


第\(2\)题

  1. #include <cstdio>
  2. int main() {
  3. int x;
  4. scanf("%d", &x);
  5. int res = 0;
  6. for (int i = 0; i < x; ++i) {
  7. if (i * i % x == 1) {
  8. ++res;
  9. }
  10. }
  11. printf("%d", res);
  12. return 0;
  13. }

输入:15

输出:_________

模拟可得:答案为\(4\)。


第\(3\)题

  1. #include <iostream>
  2. using namespace std;
  3. int n, m;
  4. int findans(int n, int m) {
  5. if (n == 0) return m;
  6. if (m == 0) return n % 3;
  7. return findans(n - 1, m) - findans(n, m - 1) + findans(n -1, m - 1);
  8. }
  9. int main(){
  10. cin >> n >> m;
  11. cout << findans(n, m) << endl;
  12. return 0;
  13. }

输入:5 6

输出:_________

模拟可得:答案为\(8\)


第\(4\)题

  1. #include <cstdio>
  2. int n, d[100];
  3. bool v[100];
  4. int main() {
  5. scanf("%d", &n);
  6. for (int i = 0; i < n; ++i) {
  7. scanf("%d", d + i);
  8. v[i] = false;
  9. }
  10. int cnt = 0;
  11. for (int i = 0; i < n; ++i) {
  12. if (!v[i]) {
  13. for (int j = i; !v[j]; j = d[j]) {
  14. v[j] = true;
  15. }
  16. ++cnt;
  17. }
  18. }
  19. printf("%d\n", cnt);
  20. return 0;
  21. }

输入:10 7 1 4 3 2 5 9 8 0 6

输出:_________

模拟可得:答案为\(6\)


完善程序

第\(1\)题

(最大公约数之和)下列程序想要求解整数的所有约数两两之间最大公约数的和对\(10007\)求余后的值,试补全程序。(第一空 2 分,其余 3 分)

举例来说,\(4\)的所有约数是\(1,2,4\)。\(1\)和\(2\)的最大公约数为\(1\);\(2\)和\(4\)的最大公约数为\(2\);\(1\)和\(4\)的最大公约数为\(1\)。于是答案为\(1+2+1=4\)。

要求getDivisor函数的复杂度为\(O(\sqrt{n})\),gcd函数的复杂度为\(O(logmax(a,b))\)。

  1. #include <iostream>
  2. using namespace std;
  3. const int N = 110000, P = 10007;
  4. int n;
  5. int a[N], len;
  6. int ans;
  7. void getDivisor() {
  8. len = 0;
  9. for (int i = 1; (1) <= n; ++i)
  10. if (n % i == 0) {
  11. a[++len] = i;
  12. if ( (2) != i) a[++len] = n / i;
  13. }
  14. }
  15. int gcd(int a, int b) {
  16. if (b == 0) {
  17. (3) ;
  18. }
  19. return gcd(b, (4) );
  20. }
  21. int main() {
  22. cin >> n;
  23. getDivisor();
  24. ans = 0;
  25. for (int i = 1; i <= len; ++i) {
  26. for (int j = i + 1; j <= len; ++j) {
  27. ans = ( (5) ) % P;
  28. }
  29. }
  30. cout << ans << endl;
  31. return 0;
  32. }

答案:

  1. \(i*i\);枚举到\(\sqrt{n}\);
  2. \(n/i\);
  3. \(return a\);注意没有;
  4. \(a\%b\);
  5. \(gcd(a[i],a[j])+ans\)

第\(2\)题

对于一个\(1\)到\(n\)的排列\(P\)(即\(1\)到\(n\)中每一个数在\(P\)中出现了恰好一次),令\(q_{i}\)为第\(i\)个位置之后第一个比\(P_{i}\)值更大的位置,如果不存在这样的位置,则\(q_{i}=n+1\)。

举例来说,如果\(n=5\)且\(P\)为\(1 5 4 2 3\),则\(q\)为\(2 6 6 5 6\)。

下列程序读入了排列\(P\),使用双向链表求解了答案。试补全程序。(第二空\(2\)分,其余\(3\)分)

数据范围\(1 \leq n \leq 10^{5}\)。

  1. #include <iostream>
  2. using namespace std;
  3. const int N = 100010;
  4. int n;
  5. int L[N], R[N], a[N];
  6. int main() {
  7. cin >> n;
  8. for (int i = 1; i <= n; ++i) {
  9. int x;
  10. cin >> x;
  11. (1) ;
  12. }
  13. for (int i = 1; i <= n; ++i) {
  14. R[i] = (2) ;
  15. L[i] = i - 1;
  16. }
  17. for (int i = 1; i <= n; ++i) {
  18. L[ (3) ] = L[a[i]];
  19. R[L[a[i]]] = R[ (4) ];
  20. }
  21. for (int i = 1; i <= n; ++i) {
  22. cout << (5) << " ";
  23. }
  24. cout << endl;
  25. return 0;
  26. }

答案:

  1. \(a[x]=i\)
  2. \(i+1\)
  3. \(R[a[i]]\)
  4. \(a[i]\)
  5. \(R[i]\)

全文完,如果您在文中发现了什么问题,欢迎提出。

NOIP2018初赛普及组原题&题解的更多相关文章

  1. noip2008普及组3题题解-rLq

    (第一次写题解,随意喷) (只是前一天的作业哈) (先凑个数) 题目描述 上体育课的时候,小蛮的老师经常带着同学们一起做游戏.这次,老师带着同学们一起做传球游戏.游戏规则是这样的:n个同学站成一个圆圈 ...

  2. noip2008普及组4题题解-rLq

    (啊啊啊终于补到了今天的作业了) 本题地址:http://www.luogu.org/problem/show?pid=1058 题目描述 小渊是个聪明的孩子,他经常会给周围的小朋友们将写自己认为有趣 ...

  3. [题解]NOIP2018(普及组)T1标题统计(title)

    NOIP2018(普及组)T1标题统计(title) 题解 [代码(AC)] #include <iostream> #include <cstdio> #include &l ...

  4. 第二十四届全国青少年信息学奥林匹克联赛初赛 普及组C++语言试题

    第二十四届全国青少年信息学奥林匹克联赛初赛 普及组C++语言试题 1.原题呈现 2.试题答案 3.题目解析 因博客园无法打出公式等,所以给你们几个小编推荐的链接去看看,在这里小编深感抱歉! https ...

  5. 05:统计单词数【NOIP2011复赛普及组第二题】

    05:统计单词数 总时间限制:  1000ms 内存限制:  65536kB 描述 一般的文本编辑器都有查找单词的功能,该功能可以快速定位特定单词在文章中的位置,有的还能统计出特定单词在文章中出现的次 ...

  6. NOIP2012 普及组真题 4.13校模拟

    考试状态: 我今天抽签看了洛谷的… 这我能怂???凶中带吉,我怕考试??我!不!怕! 看着整个机房的男同学们,我明白我是不会触发我的忌了.很好,开刷. A. [NOIP2012普及组真题] 质因数分解 ...

  7. 纪中10日T1 2300. 【noip普及组第一题】模板题

    2300. [noip普及组第一题]模板题 (File IO): input:template.in output:template.out 时间限制: 1000 ms  空间限制: 262144 K ...

  8. 洛谷P1067 多项式输出 NOIP 2009 普及组 第一题

    洛谷P1067 多项式输出 NOIP 2009 普及组 第一题 题目描述 一元n次多项式可用如下的表达式表示: 输入输出格式 输入格式 输入共有 2 行 第一行 1 个整数,n,表示一元多项式的次数. ...

  9. 【总结】2022GDOI普及组试题与题解(缺两天的T4)

    标签 2022 广东省选普及组 GDOI 试题 前往Luogu下载 Luogu下载:This Day1题解 T1 邹忌讽齐王纳谏 打卡题,建议模拟 建议使用map,时间复杂度为\(O(nlogn)\) ...

随机推荐

  1. 机器视觉-EasyDL商品检测-标准版-Demo

    机器视觉-EasyDL商品检测-标准版 功能: EasyDL是百度大脑中的一个定制化训练和服务平台,EasyDL零售版是EasyDL针对零售场景推出的行业版,定制商品检测服务是EasyDL零售版的一项 ...

  2. Android LayoutInflater.inflate源码解析

    一年多以前看过源码,感觉了解比较透彻了,长时间不经大脑思考,靠曾经总结的经验使用inflate方法,突然发现不知道什么时候忘记其中的原理了,上网查了一些资料,还各有不同,反而把我搞糊涂了,还是自己看源 ...

  3. vmware vpshere 安装完的必备工作

    1:例如:vCenter计算机地址为:192.168.0.200, 访问地址:https://192.168.0.200,安装证书: 参考教程:https://blog.csdn.net/cooljs ...

  4. 运维告诉我CPU飙升300%,为什么我的程序上线就奔溃了

    线上服务CPU飙升 前言 功能开发完成仅仅是项目周期中的第一步,一个完美的项目是在运行期体现的 今天我们就来看看笔者之前遇到的一个问题CPU飙升的问题. 代码层面从功能上看没有任何问题但是投入使用后却 ...

  5. Linux的三剑客

    首先,需要介绍一下管道和正则表达式,因为它经常和Linux三剑客一起使用. 一.管道Linux 提供管道符"|",将两个命令隔开,管道符左边命令的输出作为管道符右边命令的输入. c ...

  6. goland mod模式下不从vendor文件夹查找依赖

    goland使用vendor作为获取依赖源 软件版本: system:windows10 1709 terminal: wsl ubuntu1804 goland:201903 goland 打开项目 ...

  7. [bug] jupyter notebook:服务在阿里云上启动,本地浏览器无法访问

    问题 在阿里云上装了个jupyter,服务正常启动了,但网页上无法访问 排查 安全组已经设置过了,7777端口 在宝塔面板查看,发现7777端口并没有开,打开就可以访问了 原来阿里云的安全组和防火墙是 ...

  8. windows下安装python 且 安装pip

    1.安装python 第一步,windows下面的Python安装一般是通过软件安装包安装而不是命令行,所以我们首先要在Python的官方主页上面下载最新的Python安装包.  下载地址是:http ...

  9. [刷题] 235 Lowest Common Ancestor of a Binary Search Tree

    要求 给定一棵二分搜索树和两个节点,寻找这两个节点的最近公共祖先 示例 2和8的最近公共祖先是6 2和4的最近公共祖先是2 思路 p q<node node<p q p<=node& ...

  10. Linux创建RAID概述

    Linux创建RAID RAID概述 RAID(Redundant Array of Independent Disk)虚拟存储系统 RAID即独立冗余磁盘阵列,其思想是将多块独立的磁盘按不同的方式组 ...