历年CSP-J初赛真题解析 | 2016年CSP-J初赛 附上汇总帖历年CSP-J初赛真题解析 | 汇总单项选择第1题以下不是微软公司出品的软件是 A.PowerpointB.WordC.ExcelD.Acrobat Reader【答案】D【解析】A、B、C都是属于微软的Office软件。D选项是Adobe公司的读取PDF的软件第2题如果256种颜色用二进制编码来表示至少需要 位。A.6B.7C.8D.9【答案】C【解析】2 8 256 2^825628256第3题以下不属于无线通信技术的是 。A.蓝牙B.WifiC.GPRSD.以太网【答案】D【解析】A、B都是无线技术C选项是2G网络中的数据传输技术D选项是有线通信技术第4题以下不是CPU生产厂商的是 。A.IntelB.AMDC.MicrosoftD.IBM【答案】C【解析】同2015年Intel和AMD都是CPU生产厂商Microsoft只生产软件。IBM生产服务器的CPU第5题以下不是存储设备的是 。A.光盘B.磁盘C.固态硬盘D.鼠标【答案】D【解析】计算机常识第6题如果开始时计算机处于小写输入状态现在有一只小老鼠反复按照CapsLock、字母键A、字母键S和字母键D的顺序循环按键 即CapsLock、A、S、D、CapsLock、A、S、D、…屏幕上输出的第81个字符是字母 。A.AB.SC.DD.a【答案】C【解析】ASDasd一循环81%63应该是第三个字符D第7题二进制数00101100和00010101的和 。A.00101000B.01000001C.01000100D.00111000【答案】B【解析】同前几年的题注意11要进位第8题与二进制小数0.1相等的八进制数是 。A.0.8B.0.4C.0.2D.0.1【答案】B【解析】同2015年先转成十进制再转成八进制( 0.1 ) 2 ( 0.5 ) 10 ( 0.4 ) 8 (0.1)_2(0.5)_{10}(0.4)_8(0.1)2​(0.5)10​(0.4)8​第9题以下是32位机器和64位机器的区别是 。A.显示器不同B.硬盘大小不同C.寻址空间不同D.输入法不同【答案】C【解析】指的是CPU最大处理位数即内存最大寻址空间到2 32 2^{32}232位4GB。第10题以下关于字符串的判定语句中正确的是 。A.字符串是一种特殊的线性表B.串的长度必须大于零C.字符串不可以用数组来表示D.空格字符组成的串就是空串【答案】A【解析】字符串的本质就是字符数组C错误。B选项错可以是空串。空格字符串是空格组成的字符串第11题一棵二叉树如右图所示若采用顺序存储结构即用一维数组元素存储该二叉树中的结点根结点的下标为1若某结点的下标为i则其左孩子位于下标2i处、右孩子位于下标(2i1)处则图中所有结点的最大下标为 。A.6B.10C.12D.15【答案】D【解析】左儿子是2i右儿子是2i1最大下标是15第12题若有如下程序段其中s、a、b、c均已定义为整型变量且a、c均已赋值c大于0。sa;for(b1;bc;b)ss1;则与上述程序段修改s值的功能等价的赋值语句是 。A.sabB.sacC.sscD.sbc【答案】B【解析】2013年原题c个1就是c所以等于ac第13题有以下程序#includeiostreamusingnamespacestd;intmain(){intk4,n0;while(nk){n;if(n%3!0)continue;k--;}coutk,nendl;return0;}程序运行后输出的结果是 。A.2,2B.2,3C.3,2D.3,3【答案】D【解析】n4初始04第1次0/14第2次1/24第3次2/34/3输出3和3第14题给定含有n个不同的数的数组Lx 1 , x 2 , … , x n x_1, x_2,\dots, x_nx1​,x2​,…,xn​。如果L中存在x i x_ixi​(1in)使得x 1 x 2 ⋯ x i − 1 x i x i 1 ⋯ x n x_1\lt x_2\lt \dots \lt x_{i-1}\lt x_i\gt x_{i1}\gt \dots \gt x_nx1​x2​⋯xi−1​xi​xi1​⋯xn​则称L是单峰的并称x i x_ixi​是 L 的“峰顶”。现在已知L是单峰的请把a-c三行代码补全到算法中使得算法正确找到L的峰顶。a.Search(k1, n)b.Search(1, k-1)c.return L[k]Search(1,n)1.k←[n/2]2.ifL[k]L[k-1]andL[k]L[k1]3.then ____4.elseifL[k]L[k1]andL[k]L[k1]5.then ____6.else____正确的填空顺序是 。A.cabB.cbaC.abcD.bac【答案】A【解析】第2句表示如果找到了封顶那么第3句就应该返回封顶。第4句表示第k点落在峰顶的左半边所以需要从右边即[k1,n]进行查找第15题设简单无向图G有16条边且每个顶点的度数都是2则图G有 个顶点。A.10B.12C.8D.16【答案】D【解析】设顶点个数为x个则有2x/2条边第16题有7个一模一样的苹果放到3个一样的盘子中一共有 种放法。A.7B.8C.21D.3 7 3^737【答案】B【解析】之前8个球放5个袋子也是类似的使用枚举方法7个苹果放在一个盘子中17 0 07个苹果放在二个盘子中36 1 0、5 2 0、4 3 07个苹果放在三个盘子中45 1 1、4 2 1、3 3 1、3 2 2第17题下图表示一个果园灌溉系统有A、B、C、D四个阀门每个阀门可以打开或关上所有管道粗细相同以下设置阀门的方法中可以让果树浇上水的是 。A.B打开其他都关上B.AB都打开CD都关上C.A打开其他都关上D.D打开其他都关上【答案】A【解析】方案一打开B关上A方案二C、D打开第18题Lucia和她的朋友以及朋友的朋友都在某社交网站上注册了账号。下图是他们之间的关系图两个人之间有边相连代表这两个人是朋友没有边相连代表不是朋友。这个社交网站的规则是如果某人A向他她的朋友B分享了某张照片那么B就可以对该照片进行评论如果B评论了该照片那么他她的所有朋友都可以看见这个评论以及被评论的照片但是不能对该照片进行评论除非A也向他她分享了该照片。现在Lucia已经上传了一张照片 但是她不想让Jacob看见这张照片 那么她可以向以下朋友 分享该照片。A.Dana Michael EveB.Dana Eve MonicaC.Michael Eve JacobD.Micheal Peter Monica【答案】A【解析】不能分享给Jacob也不能分享给Jacob的朋友Lena、Peter、Monicat、Charles所以BCD都是错误的。第19题周末小明和爸爸妈妈三个人一起想动手做三道菜。小明负责洗菜、爸爸负责切菜、妈妈负责炒菜。假设做每道菜的顺序都是先洗菜10分钟然后切菜10分钟最后炒菜10分钟。那么做一道菜需要30分钟。注意两道不同的菜的相同步骤不可以同时进行。例如第一道菜和第二道的菜不能同时洗也不能同时切。那么做完三道菜的最短时间需要 分钟。A.90B.60C.50D.40【答案】C【解析】0-10小明洗菜110-20小明洗菜2爸爸切菜120-30小明洗菜3爸爸切菜2妈妈炒菜130-40爸爸切菜3妈妈炒菜240-50妈妈炒菜3第20题参加NOI比赛 以下不能带入考场的是 。A.钢笔B.适量的衣服C.U盘D.铅笔【答案】C【解析】同2014年常识问题求解第21题从一个4×4的棋盘不可旋转中选取不在同一行也不在同一列上的两个方格共有种 方法。【答案】72【解析】选第一个格子16个选第二个格子9个16 * 9 / 2 72第22题约定二叉树的根节点高度为1。一棵结点数为2016的二叉树最少有 个叶子结点一棵结点数为2016的二叉树最小的高度值是 。【答案】1 11【解析】如果二叉树是2016层那就只有1个叶子结点。高度最小属于完全二叉树2 n − 1 − 1 2^{n-1}-12n−1−1完全二叉树结点数2 n − 1 2^{n}-12n−1n11阅读程序#includeiostreamusingnamespacestd;intmain(){intmax,min,sum,count0;inttmp;cintmp;if(tmp0)return0;maxminsumtmp;count;while(tmp!0){cintmp;if(tmp!0){sumtmp;count;if(tmpmax)maxtmp;if(tmpmin)mintmp;}}coutmax, min, sum/countendl;return0;}第23题输入1 2 3 4 5 6 0 7输出 【答案】6, 1, 3【解析】第15行表示读到0就结束所以最后一个输入7没有读进来。运行到最后max6min1sum21count6。另外需要注意格式,后面有一个空格#includeiostreamusingnamespacestd;intmain(){inti100,x0,y0;while(i0){i--;xi%8;if(x1)y;}coutyendl;return0;}第24题输出 【答案】13【解析】题目是求1~99之间有多少个数模8余1一共13个。#includeiostreamusingnamespacestd;intmain(){inta[6]{1,2,3,4,5,6};intpi0;intpj5;intt,i;while(pipj){ta[pi];a[pi]a[pj];a[pj]t;pi;pj--;}for(i0;i6;i)couta[i],;coutendl;return0;}第25题输出 【答案】6,5,4,3,2,1,【解析】双指针模拟注意最后“1”后面还有一个“”#includeiostreamusingnamespacestd;intmain(){inti,length1,length2;string s1,s2;s1I have a dream.;s2I Have A Dream.;length1s1.size();length2s2.size();for(i0;ilength1;i)if(s1[i]as1[i]z)s1[i]-a-A;for(i0;ilength2;i)if(s2[i]as2[i]z)s2[i]-a-A;if(s1s2)coutendl;elseif(s1s2)coutendl;elsecoutendl;return0;}第26题输出 【答案】【解析】第12行至第13行就是将小写字母转为大写字母。s1和s2最后都转为I HAVE A DREAM.判断为相等完善程序读入整数请完善下面的程序使得程序能够读入两个int范围内的整数并将这两个整数分别输出每行一个。输入的整数之间和前后只会出现空格或者回车。输入数据保证合法。例如输入123-789输出123-789#includeiostreamusingnamespacestd;intreadint(){intnum0;// 存储读取到的整数intnegative0;// 负数标识charc;// 存储当前读取到的字符ccin.get();while((c0||c9)c!-)c__1__;if(c-)negative1;else__2__;ccin.get();while(__3__){__4__;ccin.get();}if(negative1)__5__;returnnum;}intmain(){inta,b;areadint();breadint();coutaendlbendl;return0;}第27题1处应填 。【答案】c cin.get()【解析】在第1个有效数字或’-前可能出现很多非法字符需要跳过第28题2处应填 。【答案】num c - ‘0’【解析】如果不是负数则第1个字符就是数字本身第29题3处应填 。【答案】 c‘0’ c‘9’【解析】如果第15行读入的是个数字则继续读入第30题4处应填 。【答案】num num * 10 c-‘0’【解析】计算num第31题5处应填 。【答案】return -num【解析】返回负数郊游活动有n名同学参加学校组织的郊游活动已知学校给这n名同学的郊游总经费为A元与此同时第i位同学自己携带了Mi元。为了方便郊游活动地点提供B(≥n)辆自行车供人租用。租用第j辆自行车的价格为Cj元每位同学可以使用自己携带的钱或者学校的郊游经费为了翻遍账务管理每位同学只能为自己租用自行车且不会借钱给他人他们想知道最多有多少位同学能够租用到自行车。本题采用二分法。对于区间[1,r]我们取中间点mid并判断租用自行车的人数能否达到mid。判断的过程是利用贪心算法实现的。#includeiostreamusingnamespacestd;#defineMAXN1000000intn,B,A,M[MAXN],C[MAXN],l,r,ans,mid;boolcheck(intnn){intcount0,i,j;i__1__;j1;while(in){if(__2__)countC[j]-M[i];i;j;}return__3__;}voidsort(inta[],intl,intr){inti1,jr,xa[(lr)/2],y;while(ij){while(a[i]x)i;while(a[j]x)j--;if(ij){ya[i];a[i]a[j];a[j]y;i;j--;}}if(ir)sort(a,i,r);if(lj)sort(a,l,j);}intmain(){inti;cinnBA;for(i1;in;i)cinM[i];for(i1;iB;i)cinC[i];sort(M,1,n);sort(C,1,B);l0;rn;while(lr){mid(lr)/2;if(__4__){ansmid;lmid1;}else{r__5__;}}coutansendl;return0;}第32题第一空填 【答案】n-nn1【解析】从第nn个人到第n个人是否可以租车第33题第二空填 【答案】C[j]M[i]【解析】如果个人的前不足以支付则用总经费第34题第三空填 【答案】count A【解析】如果总花费小于等于总经费就是可以的第35题第四空填 【答案】check(mid)【解析】需要判断mid这个值是否成功第36题第五空填 【答案】mid-1【解析】二分模板对于false的情况r mid - 1缩小区间