宁波市第31届小学生计算机程序设计初赛试题— . 选择题(每題1 . 5 分,共3 0分。
每小题只有唯一个正确答案)1. 一个16 位整型变量占用()个字节A.1B.2C.4D.82. 表达式29 div 5 mod 2 + trunk(3.78)的值是()A.33B.32C.4D.53. 字母信息在计算机中最终是以数值的形式存储的,ascii 码统一规定了常用符号用哪些数值来表示,例如字母‘Z'的ascii 码是十进制的90,字母‘L’的ascii 码是十进制(),A. 108B.90C.76D.754. 下列选顶中不属于音频文件格式的是()A.wav 格式B.mp3 格式C.avi 格式D.flac 格式5. 如主存容量为32M 字节,且按字节编址,表示该主存地址至少应需要()位A.16B.20C.2D.326. 如果一棵二叉树的前序遍历是ABDEFC.中序遍历是DEBFAC,那么它的后序遍历是()A.ABCDFEB.CAFBEDC.EDFBCAD.DEFBCA7. 表达式a*(b+c)-d 的后缀表达式是()A.abcd*+-B.abc+*d-C.abc*+d-D. -+*abcd8. 计算机所能辨认的最小信息单位是()A.字节B.位C.字符串D.(K)9. 对于下图,至少要减掉()条边,使之存在一条路径,经过图中每条边一次且仅一次A.0B.1C.2D.310. NFC 是近距离无线通讯技术,此项可以用在手机上,以下()不属于此技术在手机上的应用实例A.手机登录wifi 刷微信B.手机机场登机验证C.手机充当大厦的门禁钥匙D.手机公交刷卡11. 己知有abcdef 六个整型变量,大小关系如下:a>b,a>c,a>d,b>f,b>c,f>d,d>c,f>e,d>e,c>e 根据以上大小关系,请分折六个整型变量第3 大的是()A.aB.bC.dD.f12. 一片容量为16GB 的SD 卡能存储大约()张大小为2MB 的码照片。
A.2000B.4000C. 8000D.1600013. 下列哪个不属于物联网的应用实例( )A.电脑实时显示快递车辆运动轨迹B.苹果手机小偷刷机时警察定位并抓荻C.远监控工地施工D.实况足球里的角色具备c 罗、梅西的个人能力14. 互联网其中一大优势就是可以共享资源,以下哪项活动不属于共享资源()A.为网民提供代理服务器加速流览国外网站。
B.设计一个学生信息的数据库C.QQ 传输文件D.在校网上发布最新版编程软件15. 15、三位水仙花数是指每个位上的数字的 3 次幂之和等于它木身。
(例如:1^3+5^3+3^3=153)找所有三位水仙花数程序如下,它的算法属于()for i:l to 9 do for j:=0 to 9 do for k:=0 to 9 do if(i*i*i+j*j*j+k*k*k=i*100+j*10+k) then ……A.动态规划B.贪心C.枚举D.递归16. 如果一个栈始时为字.当前栈中的元素从栈底到栈顶依次为a,b·另有元素c,d,己经出栈,则不可能的人栈顺序是()。
A.bacdB.cdabC.cadbD.dabc17. 二进制数10101 转化成十进制表示是()A.42B.21C.13D.2518. 18、己知逻辑表达式值为false 的是()a=true b=false c=false d=trueA.a and b xor c and dB.a Or b and c or dC.a xor b or c and dD.a or b xor d and c19. 计算机前端总线的英文名字是Front Side Bus,用FSB 表示.指的是将CPU 接到()的总线。
A.内存B.北桥芯片C.南桥芯片D.I/O 设备20. 第45 届全球超级汁算机500 强排行榜.于2015 年7 月公布,冠军是()A.中国“天河二号”B.美国橡树岭国家验率的“泰坦”C.日本理化学研究所的"K Computer"D.美国劳伦斯一利弗莫尔国家实验的“紅杉”二.问题求解(每理5分,共10分)1. 豆豆是个对数学非常敏感的孩子,刚学了加法,他就发现3的所有倍数个位数字都是有规律的,例如: 3,6,9,12,15,18,21,24,27,30,33,36,39,42 ....存个循环(3,6,9,2,5,8,1,4,7,0)。
等到学了乘法后,他思考这个问题:3^2016(2016个3相乘)运算结果的个位上的数字是()。
答案:2. 豆豆课余爱好之一就是玩各种自创的数字游戏,其中一种很受同学的好评,大家经常开展比赛。
这个游戏如下:5行5列的数字方阵中选取5个数,求这5 个数任意2个既不是同一行,也不能同一列。
看看谁能最先算出这5个数最大和是()。
豆豆总是能胜出。
看人的了。
15 06 14 12 20 03 11 18 03 13 06 09 14 09 14 13 12 07 16 19 22 14 08 07 14答案:三.阅读程序,求程序运行输出结果(每题8分,共32分)1.vara, b,c, d: longint;beginread(a, b, c);a:=a+b*c;b:=a-c;c:=a+b;d:=b*c-a;a:=d*(a-b);writeln('a=',a);end.【输入】:111 输出:2.vari,j:longint;a,b:array[0..20] of longint;out:array[0..200] of boolean;beginfor i:=1 to 12do read(a[i]);for i:=1 to 15do read(b[i]);for i:=1 to 12 dofor j:=1 to 15 doif a[i]=b[j] then out[a[i]]:=true;for i:=1 to 90 doif not out[i] and (i mod 8=0) thenwrite(i,' ');end.【输入】:2 17 23 28 29 37 38 48 49 58 79 1142 17 23 28 29 38 45 48 56 58 67 72 75 101 122输出:3.varj:longint;use:array[0..10] of boolean;a:array[0..10] of longint;procedure dfs( i: longint);var j:longint;beginif i>2 then beginfor j:= 1 to 2 dowrite(a[j],' ');writeln;exitend;for j:=a[i-1]+1 to 3 doIf not use[j] then beginuse[j]:=true;a[i]:=j;dfs(i+1);use[j]:=false;end;end;begindfs(1);end.输出:4.varn,i,j,t,sum:longint;a:array[0..50] of longint;f:array[0..50] of boolean;beginreadln(n);for i:= 1to n doread(a[i]);fillchar(f,sizeof (f),true);for i := 1to n doif f[i] thenbegininc(sum);t:=a[i] ;for j:=i to n doif f[j] and (t=a[j]) thenbeginf[j] := false;t:=t-1;if t=0 thenbreak;end;end;writeln(sum);end.【输入】:89 19 11 7 3 2 6 1输出:四.完善程序(前两空每空2 分,其余八空每空3 分,共28 分)1. 买书书店有个买2送1的活动:买3本书只要付较贵的2本就可以了。
举个例子:10 3 2 4 6 4 9 , 如果这样组合(10, 3, 2), (4, 6, 4) and(9),就能在第一个括号中省下2元,第二括号中省下4元,但第三个括号不能省了,因为不足3本书。
售货员是个热心肠也爱动脑筋的人,他想为每位顾客尽可能多的省钱,请你帮助她吧。
注意:不一定非要组合三本书一堆,但一堆的数量必须是1到3输入的第一行一个整数N,表示书的数量。
接下来的N行,每行包含一个整数Ci,表示每本书的价格。
输出一个数。
表示最终要为这些书付出的最小价格。
解题思路:贪心的策略,按照书费的降序排序,挑尽可能贵的2本放在一起来省去书费,反复操作,直到书少于3本样例中10 3 2 4 6 4 9 就可以这样分组:(10 9 6)、(4 4 3)、(2),很显然省去了6+3+2=9,这是最省钱的分组方案,根据这个思路,请完善以下程序varn,i:longint;a:array[0..100001] of longint;s:int64;procedure sort(l,r:longint);//sort过程实现a数组值的降序排序var i,j,x,y:longint;begini:=l; j:=r; x:=a[(l+r) div 2];repeatwhile_________ do inc(i);while x>a[j] do dec(j);if not(i>j) thenbeginy:=a[i];_________; a[j]:=y;inc(i); j:=j-1;end;until _________;if l<j then sort(l,j);if i<r then sort(i,r);end;beginreadln(n);for i:= 1 to n doread(a[i]);sort(1,n);for i:= 1 to n doif _________thens:= _________;writeln(s);end.2. 拼木棍有一些同样长的木棍,氢这些木棍随意砍成几段。
现在,他想把小木棍拼接成原来的的样子,但是忘记了自己开始时有多少根木棍和它们的的长度。
给出每段小木棍的长度,编程找出原始木棍的最小可能长度。
输入第一行为一个单独的整数N表示砍过以后的小木棍的总数。
笫二行为N个用空格隔开的正整数,表示N根小木棍的长度,输出仅一行,表示要求的原始木棍的最小可能长度。
样例输入:95 2 1 5 2 1 5 2 1样例输出:6解题思路:枚举原始木棍长度,然后验证小木棍是否能拼凑出该枚举长度的整数倍,但要充分利用题目的隐含的信息进行优化,不然会超时优化1:原始木棍长度>=最大的小木棍长度,原始木棍长度<=小木棍长度之和优化2:小木棍的长度之和一定是原始的木棍长度的倍数优化3:小木棍应该由大到小去拼凑枚举出来的原始木棍长度优化4:当每次尝试接入小木棍后,大木棍未达到要求长度时,尝试接入的下一根小木棍要和刚刚接入小木棍和长度不相等优化5:当一个小木棍接入后,刚好达到原始木棍长度,在以后的尝试中没有必要用更小的小木棍代替这个刚接入的小木棍根据以上解题思路完善如下程序varn,i,L,max,sum,j:longint;a:array[0..100] of longint;visit:array[0..100] of boolean;procedure dfs(k,now:longint);vari,last:longint;beginif (k>n) and (now=0) thenbeginwriteln(L);halt;//退出整个秤序end;if k>n then exit;last:=0;for i:=1 to n doif (not(visit[i])) and (now+a[i]<=L) and (_________)then beginvisit[i]:=true;if (_________)thenbegindfs(k+1,0);visit[i]:=false;exit;//这里的退出体现了优化5end;_________;visit[i]:=false;last:=a[i];if now=0 then exit;end;end;beginreadln(n);i:=n;while i>0 dobeginread(L);_________;a[i]:=L;i:=i-1;if L>max then max:=L;end;for i:=1 to n dofor j:=i+1 to n doif_________then //将所有木棍从大到小排序,利用优化3beginL:=a[i];a[i]:=a[j];a[j]:=L;end;for L:=max to sum do//枚举原始木棍长度L长度时由小到大枚举.利用优化1 if sum mod L=0 then //优化2dfs(1,0);end.。