宁波市第31届小学生教育计算机程序设计初赛精彩试题

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

宁波市第31届小学生计算机程序设计初赛试题
— . 选择题(每題 1 . 5 分,共3 0分。

每小题只有唯一个正确答案)
1. 一个 16 位整型变量占用()个字节
A.1
B.2
C.4
D.8
2. 表达式 29 div 5 mod 2 + trunk(3.78)的值是()
A.33
B.32
C.4
D.5
3. 字母信息在计算机中最终是以数值的形式存储的,ascii 码统一规定了常用符号用哪些数值来表示,例如字母‘Z'的 ascii 码是十进制的 90,字母‘L’的 ascii 码是十进制(),
A. 108
B.90
C.76
D.75
4. 下列选顶中不属于音频文件格式的是()
A.wav 格式
B.mp3 格式
C.avi 格式
D.flac 格式
5. 如主存容量为 32M 字节,且按字节编址,表示该主存地址至少应需要()位
A.16
B.20
C.2
D.32
6. 如果一棵二叉树的前序遍历是 ABDEFC.中序遍历是 DEBFAC,那么它的后序遍历是 ()
A.ABCDFE
B.CAFBED
C.EDFBCA
D.DEFBCA
7. 表达式 a*(b+c)-d 的后缀表达式是()
A.abcd*+-
B.abc+*d-
C.abc*+d-
D. -+*abcd
8. 计算机所能辨认的最小信息单位是()
A.字节
B.位
C.字符串
D.(K)
9. 对于下图,至少要减掉()条边,使之存在一条路径,经过图中每条边一次且仅一次
A.0
B.1
C.2
D.3
10. 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.a
B.b
C.d
D.f
12. 一片容量为 16GB 的 SD 卡能存储大约()张大小为 2MB 的码照片。

A.2000
B.4000
C. 8000
D.16000
13. 下列哪个不属于物联网的应用实例( )
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.bacd
B.cdab
C.cadb
D.dabc
17. 二进制数 10101 转化成十进制表示是()
A.42
B.21
C.13
D.25
18. 18、己知逻辑表达式值为 false 的是() a=true b=false c=false d=true
A.a and b xor c and d
B.a Or b and c or d
C.a xor b or c and d
D.a or b xor d and c
19. 计算机前端总线的英文名字是 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.
var
a, b,c, d: longint;
begin
read(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.
var
i,j:longint;
a,b:array[0..20] of longint;
out:array[0..200] of boolean;
begin
for i:=1 to 12 do read(a[i]);
for i:=1 to 15 do read(b[i]);
for i:=1 to 12 do
for j:=1 to 15 do
if a[i]=b[j] then out[a[i]]:=true;
for i:=1 to 90 do
if not out[i] and (i mod 8=0) then
write(i,' ');
end.
【输入】:
2 17 2
3 28 29 37 38 48 49 58 79 114
2 17 2
3 28 29 38 45 48 56 58 67 72 75 101 122输出:
3.
var
j:longint;
use:array[0..10] of boolean;
a:array[0..10] of longint;
procedure dfs( i: longint);
var j:longint;
begin
if i>2 then begin
for j:= 1 to 2 do
write(a[j],' ');
writeln;
exit
end;
for j:=a[i-1]+1 to 3 do
If not use[j] then begin
use[j]:=true;
a[i]:=j;
dfs(i+1);
use[j]:=false;
end;
end;
begin
dfs(1);
end.输出:
4.
var
n,i,j,t,sum:longint;
a:array[0..50] of longint;
f:array[0..50] of boolean;
begin
readln(n);
for i:= 1 to n do
read(a[i]);
fillchar(f,sizeof (f),true);
for i := 1 to n do
if f[i] then
begin
inc(sum);
t:=a[i] ;
for j:=i to n do
if f[j] and (t=a[j]) then
begin
f[j] := false;
t:=t-1;
if t=0 then
break;
end;
end;
writeln(sum);
end.
【输入】:
8
9 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,这是最省钱的分组方案,根据这个思路,请完善以下程序
var
n,i:longint;
a:array[0..100001] of longint;
s:int64;
procedure sort(l,r:longint);//sort过程实现a数组值的降序排序
var i,j,x,y:longint;
begin
i:=l; j:=r; x:=a[(l+r) div 2];
repeat
while _________ do inc(i);
while x>a[j] do dec(j);
if not(i>j) then
begin
y:=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;
begin
readln(n);
for i:= 1 to n do
read(a[i]);
sort(1,n);
for i:= 1 to n do
if _________then
s:= _________;
writeln(s);
end.
2. 拼木棍
有一些同样长的木棍,氢这些木棍随意砍成几段。

现在,他想把小木棍拼接成原来的的样子,但是忘记了自己开始时有多少根木棍和它们的的长度。

给出每段小木棍的长度,编程找出原始木棍的最小可能长度。

输入第一行为一个单独的整数N表示砍过以后的小木棍的总数。

笫二行为N个用空格隔开的正整数,表示N根小木棍的长度,输出仅一行,表示要求的原始木棍的最小可能长度。

样例输入:
9
5 2 1 5 2 1 5 2 1
样例输出:
6
解题思路:
枚举原始木棍长度,然后验证小木棍是否能拼凑出该枚举长度的整数倍,但要充分利用题目的隐含的信息进行优化,不然会超时
优化1:原始木棍长度>=最大的小木棍长度,原始木棍长度<=小木棍长度之和
优化2:小木棍的长度之和一定是原始的木棍长度的倍数
优化3:小木棍应该由大到小去拼凑枚举出来的原始木棍长度
优化4:当每次尝试接入小木棍后,大木棍未达到要求长度时,尝试接入的下一根小木棍要和刚刚接入小木棍和长度不相等
优化5:当一个小木棍接入后,刚好达到原始木棍长度,在以后的尝试中没有必要用更小的小木棍代替这个刚接入的小木棍
根据以上解题思路完善如下程序
var
n,i,L,max,sum,j:longint;
a:array[0..100] of longint;
visit:array[0..100] of boolean;
procedure dfs(k,now:longint);
var
i,last:longint;
begin
if (k>n) and (now=0) then
begin
writeln(L);
halt;//退出整个秤序
end;
if k>n then exit;
last:=0;
for i:=1 to n do
if (not(visit[i])) and (now+a[i]<=L) and (_________) then begin
visit[i]:=true;
if (_________) then
begin
dfs(k+1,0);
visit[i]:=false;
exit;//这里的退出体现了优化5
end;
_________ ;
visit[i]:=false;
last:=a[i];
if now=0 then exit;
end;
end;
begin
readln(n);
i:=n;
while i>0 do
begin
read(L);
_________ ;
a[i]:=L;
i:=i-1;
if L>max then max:=L;
end;
for i:=1 to n do
for j:=i+1 to n do
if _________then //将所有木棍从大到小排序,利用优化3
begin
L:=a[i];
a[i]:=a[j];
a[j]:=L;
end;
for L:=max to sum do//枚举原始木棍长度L长度时由小到大枚举.利用优化1 if sum mod L=0 then //优化 2
dfs(1,0);
end.。

相关文档
最新文档