2014年宁波市第29届中小学生计算机程序设计竞赛小学组初赛试题
- 格式:pdf
- 大小:149.84 KB
- 文档页数:8
宁波市第28届中小学生计算机程序设计竞赛复赛试题(小学组)题目一览关于竞赛中不同语言使用限制的说明一.关于使用Pascal语言与编译结果的说明1.对于Pascal语言的程序,当使用IDE和fpc编译结果不一致时,以fpc的编译结果为准。
2.允许使用数学库(uses math子句),以及ansistring。
但不允许使用编译开关(最后测试时pascal的范围检查开关默认关闭:{$R-,Q-,S-}),也不支持与优化相关的选项。
3.本次比赛允许使用64位整数类型:int64或qword。
1.哈夫曼编码(coding)题目描述哈夫曼编码是一种编码方式,是可变字长编码的一种,由Huffman 于1952 年提出。
该方法完全依据字符出现概率来构造异字头的平均长度最短的码字,有时称之为最佳编码,一般就叫Huffman 编码。
简单地来说,就是出现概率高的字符使用较短的编码,反之出现概率低的则使用较长的编码,这便使编码之后的字符串的平均期望长度降低,从而达到无损压缩数据的目的。
现在请你模拟这样的原则对给定的一个字符串进行字母统计。
输入输入文件coding.in,只有一行,是一个字符串,由小写英文字母组成,长度不超过255 个字符。
输出输出文件coding.out,有若干行,每行有两部分组成:一个字母和该字母出现的频率,中间用一个空格分隔,并按频率高低排列,频率相同时则按字母的ASC 码的先后顺序排列。
样例输入soon样例输出o 2n 1s 12. 立方和(cubsum)题目描述现给出一个三位数,先对这个三位数的各位数字的立方求和,然后再对求出的和中的各位数字的立方求和,如此一直继续下去,判断最后能否得到一个不再变化的固定值。
如能得到一个固定值,就求出这个固定值;如果不能,则输出提示信息“error” 。
另外请注意,在求解过程中,若某一次求和过程中得到的值超过三位数,则取该数的低三位继续往下运算……例如,对于三位数111,则第一次计算应是1×1×1+1×1×1+1×1×1=3,第二次计算应是0×0×0+0×0×0+3×3×3=27,第三次计算应是0×0×0+2×2×2+7×7×7=351,第四次计算应是3×3×3+5×5×5+1×1×1=153,第五次计算应是1×1×1+5×5×5+3×3×3=153,与第四次计算的结果相同,这时可不再计算,输出固定值153。
宁波市第29届中小学生程序设计竞赛复赛试题(初中组)解题报告第一题战马列队题意不难理解,因为n<=1000,我们可以枚举将战马替换后,最后一匹白马在队列中的位置,这样只需统计这匹马之前(包括这匹马)棕马的数量s1,这匹马之后(不包括这匹马)白马的数量s2,将它们替换就能达到我们需要的队列,那么以这个位置作为最后一匹白马的答案就是替换的马匹数即ans=s1+s2。
最终答案即为所有ans中的最小值。
别忘了n<=1000,string存不下,要用ansistring。
代码如下:vars:ansistring;i,j,n,ans,cnt:integer;beginreadln(n);readln(s);ans:=n;for i:=1 to n do begin // i即为枚举的最后一匹白马的位置cnt:=0;for j:=1 to i doif s[j]='B' then inc(cnt);for j:=i+1 to n doif s[j]='W' then inc(cnt);if ans>cnt then ans:=cnt;end;writeln(ans);end.第二题马农这道题首先需要一个常用的小技巧,我们开一个二维数组s[i,j],表示左上角为(1,1),右下角为(i,j)的子矩形中所有数字的和,我们可以用一个递推公式快速求出s数组,即s[i,j] = s[i-1,j]+s[i,j-1]-s[i-1,j-1]+a[i,j] ,其中a[i,j] 表示(i,j)这个格子上的数字。
那么求出s数组有什么用呢?利用s数组,可以迅速求出左上角为(x,y),右下角为(z,u)的子矩形中所有数字的和,公式为ans=s[z,u]-s[z,y-1]-s[x-1,u]+s[x-1,y-1]。
其实上述技巧,在前几年的宁波赛中出现过,即为小学组的题目《方格稿纸》,当然我们是初中组,自然难度要比小学组大,了解上述小技巧后,我们开始来解决这道题目。
宁波市中小学生程序设计竞赛小学组初赛模拟试题一一.选择题(每题2分,共30分。
每小题只有唯一一个正确答案)1.二进制数(1011111)2的值是(A)92 (B)93 (C)94 (D)952.每个不同的二进制数可以表示一种状态,要表示256种灰度的颜色,至少需要的二进制位数是(A)3 (B)4 (C)7 (D)83.以下运算结果为False的是(A)not(5>=5) (B)(5>=4) and (7<8)(C)not(false) (D)(5<4) or (7>5)4.文本文件的扩展名是(A)pas (B)exe (C)bat (D)txt5.下列属于信息技术领域中存储容量单位的是(A)ROM (B)GB (C)MP3 (D)DVD6.全国青少年信息学奥林匹克联赛的英文简称是(A)IOI (B)NOI (C)GDOI (D)NOIP7.已知一维数组定义a:array[0..100]of longint;每个元素占用4个字节,则数组a需要占用的总字节数是(A)100 (B)101 (C)400 (D)4048.在pascal系统中,下列可作为变量名的是(A)3a (B)do (C)array (D)mp39.在pascal系统中,保存文件的快捷键是(A)F2 (B)F3 (C)Ctrl+c (D)Ctrl+v10.用Free Pascl编程时,你写了以下的语句assign(output,'abc.out');rewrite(output);在该程序中必须包含的语句是(A)close(input) (B)close(output)(C)close(abc.out) (D)close(‘abc.out’)11. 有以下的程序:var s:string; beginreadln(s);writeln(s[1]);end.该程序运行时,输入“ABC ”后按回车键,输出为(A )A (B )B (C )C (D )ABC12.程序设计竞赛使用的Free Pascal 语言中,Maxint 的值等于(A )1024 (B )32767 (C )65536 (D )-3276813. 在Pascal 程序中,以下结果为整数型的是(A )4 / 2 (B )19 div 3 (C )abs(3.1-1.1) (D )sqrt(9)14. 有以下程序段S:=0;for i:=1 to 10 do if i mod 2=0 then s:=s+1; writeln(s);虚线框内的程序控制结构属于(A )顺序结构 (B )循环结构 (C )选择结构 (D )树型结构15. 能随机产生二位正整数的pascal 表达式是(A )random(99) (B )random(100) (C )random(89)+10 (D )random(90)+10二.问题求解(每题5分,共10分)1.在不超过100的正整数中,不能被2整除、也不能被3整除的整数个数是多少?2.在四行四列的表格中,每格放有0或1的数字;以1表示此处有障碍, 0表示人可以从此处通过。
宁波市第24届中小学生计算机程序设计竞赛复赛试题(小学组)题目一览关于竞赛中不同语言使用限制的说明一.关于使用Pascal语言与编译结果的说明1.对于Pascal语言的程序,当使用IDE和fpc编译结果不一致时,以fpc的编译结果为准。
2.允许使用数学库(uses math子句),以及ansistring。
但不允许使用编译开关(最后测试时pascal的范围检查开关默认关闭:{$R-,Q-,S-}),也不支持与优化相关的选项。
3.本次比赛允许使用64位整数类型:int64或qword。
1.甜蜜的烦恼(space)题目描述【问题描述】最近珍珍学会了使用电脑,她发现可以利用电脑解决很多事情,并且效率会快许多。
比如,在一份名单中找某个人的姓名,在以前,她得依次逐个查找,速度慢又很容易看错。
现在,她使用菜单命令:“编辑”-“查找”(或按Ctrl+F键),在弹出的查找对话框中,输入要查找的姓名,电脑就会找到要找的姓名或告诉你不存在你要找的姓名了。
真是又快又准,太爽了!今天珍珍在查找时,输入“张明”,电脑告诉她不存在,但她不经意间发现“张明”是有的!原来,提供原始名单的人,为了格式漂亮在中间输入了一个空格,因此电脑找不到了。
她想这容易解决,继续查找“李达”,没有?查找“李达”(中间一个空格),还没有?原来某些姓名中间的空格数是有多个的!珍珍想删除所有姓名中间的空格,但由于名单很多,一个一个删除太慢了,所以她找到了会编程解决问题的你,请你写一个程序,删除所有名单中间的空格。
输入【输入】输入文件space.in的第一行只有一个正整数n,表示名单中共有n个人的姓名。
第二行至第n+1行共n行,每行是一个人的姓名(由大小写英文字母以及字母之间的空格组成)。
输出【输出】输出文件space.out有n+1行,第一行只有一个正整数,表示总共删除的空格数。
第二行至第n+1行共n行,每行表示一个删除空格后的姓名(按照输入姓名的次序)。
鄞州区小学生计算机程序设计竞赛(两小时完成)◆◆请将正确答案在答题卷上填写,在本试题卷上答题无效◆◆一、选择题(1.5*15)1)下列标识符哪个是合法的( )。
A、abcB、x#C、beginD、1a2)下列函数值是整型的是()A.chr(23)B.ord(x)C.pred(x)D.succ(x)3)下列函数值不可能是布尔类型的是()A.odd(g)B.ord(g)C.pred(g)D.succ(g)4)I nteger类型的数据范围是()A.-32767~32767B.0~32767C.-32768~32767D.-32767~327685)设x是实型变量,下列表达式能将x四舍五入后保留三位小数的是()A.round(x)B.round(x)/1000C.round(x*1000)/1000D.round(x*100)/1006)下列表达式的值为FALSE的是()A.Odd(True(7.49))B.Round((Abs(-9.5)))<10C.Not(‘9’<’100’)D.Ord(Chr(Pred(8)))>=77)判断变量ch的值是否为小写字母,下列表达式正确的是()A.not(ch<’a’)or(ch>’z’)B.’a’<=ch<=’z’C.(ch>=a)and(ch<=z)D.ch>=’a’ and ch<=’z’8)表达式Chr(Ord(‘A’)+4))的值是()A.’D’B.‘E’C.69D.1019)设a[1]=1,a[2]=2,a[3]=3,a[4]=4,a[5]=5,a[6]=6,且i=1,j=2,k=3,m=4下列变量的值等于3的是()A.a[i*j]B.a[a[k-i]+3]C.a[m div j]D.a[a[j+k-2]]10)十进制数2011等值于八进制数()A.4033B.3755C.4003 D 3733.11)下列无符号数中,最小的数是()A.(11011001)2B.(31)10C.(37)8D.(2A)1612)十进制算是表达式:5*512+7*64+4*8+5的运算结果,用二进制表示为()A.101101100101B.101111100101C.111111100101D.11101111011113)十进制数13/128可用二进制数码序列表示为()A.1101/1000000B.1101/10000000C.0.001101D. 1011/1000000014)已知二进制数x =(0.1011010)2 ,则[x/4]=( )A.0.01011101B.111101100C.0.00101101D.0.101101015)由4个a,3个b和1个c构成的所有字符串中,包含字串”abc”的共有( )个A.30B.60C.120D.48二、填空题1、基础知识填空(1*10)1)计算机语言分为___________语言、______________语言和____________语言。
宁波市第29届中小学生程序设计竞赛复赛试题(初中组)比赛时间:2014年3月29日上午9:00-12:00(请选手务必仔细阅读本页内容)四.运行内存限制五.注意事项1、文件名(程序名和输入输出文件名)必须使用小写。
2、C/C++中函数main()的返回值类型必须是int,程序正常结束时的返回值必须是0。
1.战马列队(queue.pas/c/cpp)【问题描述】马年到了,也到了检阅战马的时候。
战马分为白色和棕色两种,一字排开,指挥官希望他的战马队列尽可能整齐好看,将相同颜色的战马放在一起。
大部分人都喜欢高头白马,因此,指挥官要求白马排在前面,棕马排在后面。
现在,N 匹战马都已经在广场列队。
为了达到要求,指挥官可以调换任意一个位置上的战马(有充足的备用战马)。
问至少调换多少匹可以达到要求。
【输入】第一行一个整数N,表示已经排队的战马数量。
第二行一个字符串,表示当前队列从前到后战马的颜色,只包含两种字符,"W"表示白马,"B"表示黑马。
【输出】输出一个数字,表示至少需要调换多少匹战马。
【样例1解释】已经符合白马在前,棕马在后,不需要调换。
【样例2解释】可以把棕马都换成白马WWWWW,或者WWWBB,都是符合要求的队列,至少调换2匹。
【数据范围】30%的数据N<=20。
70%的数据N<=500。
100%的数据N<=1000。
2.马农(farmer.pas/c/cpp)【问题描述】在观看完战马检阅之后,来自大草原的两兄弟决心成为超级“马农”,专门饲养战马。
兄弟两回到草原,将可以养马的区域,分为N*N的单位面积的正方形,并实地进行考察,归纳出了每个单位面积可以养马所获得的收益。
接下来就要开始规划他们各自的马场了。
首先,两人的马场都必须是矩形区域。
同时,为了方便两人互相照应,也为了防止马匹互相走散,规定两个马场的矩形区域相邻,且只有一个交点。
最后,互不认输的两人希望两个马场的收益相当,这样才不会影响他们兄弟的感情。
中小学生程序设计挑战赛初赛测试题1.1946年在美国宾夕法尼亚大学问世的 ENIAC 计算机主要由()器件组成。
[单选题] *A. 晶体管B. 电子管(正确答案)C. 小规模集成电路D. 大规模集成电路2. 下列哪一个程序设计语言不支持面向对象程序设计()。
[单选题] *A.C++B.JavaC.PHPD.C(正确答案)3. 在 C++中,要定义一个存储字符型数据的变量,其合适的数据类型是()。
[单选题] *A.char(正确答案)B.floatC.doubleD.bool4.4KB 的内存能存储()个汉字的机内码。
[单选题] *A.1024B.2048(正确答案)C.512D.40965. 下列选项中,说法错误的是()。
[单选题] *A. 算法是指解决问题的方法和步骤B. 算法的描述方法有多种C. 算法是唯一的(正确答案)D. 算法的步骤是有限的6. 下列各种基本数据类型说明符中表示单精度实型数的是()。
[单选题] *A.intB.boolC.float(正确答案)D.char7. 下列选项中,属于计算机硬件系统的是()。
[单选题] *A.IE 浏览器B.QQC.WordD. 显示器(正确答案)8. 十进制数3.75转成二进制数是()。
[单选题] *A.10.01B.11.11(正确答案)C.10.11D.11.1019. 下列选项中,能用枚举算法求解的是()。
[单选题] *A. 计算平行四边形面积B. 求100 以内的素数(正确答案)C. 求一个四位数的个位D. 将二进制转换为十进制10. 如果a,b,c 均为整型变量,其中 a=7,b=8, 执行以下语句后,变量a,b 的结果与其它几项不同的是( )。
[单选题] *A.a=a+b;b=a-b;a=a-b;B.c=a+b;a=c-a;b=c-b;C.c=a*b;a=c/a;b=c/b;D.c=a;b=c;a=b;(正确答案)11. 在 C++中,把代数式(x+1)²写成 C++表达式,正确的是()。
2014年宁波市第29届中小学生计算机程序设计竞赛小学组初赛试题一、选择题(每题有且仅有一个正确答案,选对得1.5分,选错、不选或多选均失分)1.存放一个ASCII码需要的字节数为(A)1字节(B)2字节(C)0.5字节(D)4字节2.下列软件中不属于操作系统的是(A)win7(B)linux(C)winxp(D)winrar3.下列数中最小的是(A)(7)8(B)(11)7(C)(15)10(D)(11)54.世界上第一台电子计算机诞生于(A)1949(B)1849(C)1946(D)18935.在下面各奖项中,为计算机科学与技术领域作出杰出贡献的科学家设立的奖项是(A)沃尔夫奖(B)诺贝尔奖(C)菲尔兹奖(D)图灵奖6.操作系统的文件夹采用的层次结构为(A)网状(B)链状(C)树状(D)块状7.在pascal语言中,pos(‘a’,’bbccc’)的返回值为(A)0(B)-1(C)5(D)’a’8.在pascal语言中,下列语句属于正确的赋值语句的是(A)s:=1(B)s=a+1(C)a+1=s(D)a+1:=s9.计算圆周长的算法描述如下:①输入圆半径r;②计算圆周长a(计算公式为a=2πr);③输出结果;④结束。
该算法属于(A)枚举算法(B)递归算法(C)排序算法(D)以上都不是10.现有一个数列A为1,2,3,另一个数列B为3,2,1,若采用选择排序分别的两个数列实现从小到大排序,则两个数列需要的比较次数为(A)A比B多(B)A和B一样多(C)B比A多(D)不一定11.在下述程序段中,判断语句a<>100被执行的次数为a:=99while a<>100doa:=a+1;(A)0(B)1(C)2(D)312.下面关于堆栈和队列的说法中错误的是(A)队列是一种先进先出的线性表(B)堆栈可以选择栈的任意位置进行弹出操作(C)堆栈只能选择栈顶进行压入操作(D)堆栈是一种先进后出的线性表13.下列说法中不属于计算机病毒特点的是(A)破坏性(B)传染性(C)潜伏性(D)抗药性14.程序设计的三种基本结构是(A)主程序、函数、过程(B)顺序、选择、循环(C)变量、常量、不定量(D)数组、字符串、浮点型15.下列内容中属于信息的是(A)报纸(B)黑板(C)课本(D)黑板上的放假通知16.在pascal语言中,记录类型用到的保留字为(A)record(B)struct(C)baidu(D)then17.某班有30个同学报名参加100、400、800m3个运动项目比赛。
已知有6人获100m参赛资格,8人获400m参赛资格,18人获800m参赛资格。
且其中有1人获全部3项参赛资格,则至少有()人没有获任何项目参赛资格。
(A)0(B)1(C)2(D)318.下列pascal语言的函数中,返回值不是数值类型的是(A)pos(B)copy(C)length(D)abs19.下列判断语句中,不能判断x为奇数的是(A)odd(x)=true(B)odd(x)<>false(C)x and1<>x(D)(x shr1)shl1<>x20.小李在递归函数内部定义了一个长度为100的longint数组,但是编译运行却频频报错,请问最有可能的原因是(A)代码风格不够优美(B)程序效率太低导致超时(C)显示器亮度不够(D)递归层次过多导致栈空间不足二.问题求解(每小题5分,共10分)1.在1到100的100个整数中,能被3整除且不能被4整除的数一共有个。
2.定义2个1000*1000的二维长整型数组需要的存储空间为MB。
(保留1位小数)三、阅读程序写结果(每题8分,共32分)1.Var x:longint;flag:boolean;beginread(x);flag:=false;if(x mod4=0)and(x mod100<>0)then flag:=true;if x mod400=0then flag:=true;if flag then writeln(‘leap year!’)else writeln(‘not a leap year!’);end.输入:1234输出:2.Var f:array[1..100,1..100]of longint;cnt:longint;i,j,n,t,x,y,ans:longint; beginread(n);x:=1;y:=0;for i:=1to n dobeginfor j:=1to n*2-i+1dobegininc(y);inc(cnt);f[x,y]:=cnt;end;for j:=1to n*2-i dobegininc(x);inc(cnt);f[x,y]:=cnt;end;for j:=1to n*2-i dobegindec(y);dec(cnt);f[x,y]:=cnt;end;for j:=1to n*2-i-1dobegindec(x);dec(cnt);f[x,y]:=cnt;end;end;read(t);ans:=0;for i:=1to n*2doans:=ans+f[t,i];writeln(ans);end.输入:32输出:3.Var t:longint;function f(x:longint):longint;beginif x=0then exit(0)else if x mod2=0then exit(2+f(x-1))else exit(1+f(x-1)); end;beginread(t);writeln(f(t));end.输入:2014输出:4.type arr=array[0..100000]of longint;var c,q,d,e,ans:arr;n,i:longint;procedure merge(a,b:longint);var mid,i,j,p:longint;beginmid:=(a+b)div2;if a<mid then merge(a,mid);if mid+1<b then merge(mid+1,b);p:=0;i:=a;j:=mid+1;while(i<=mid)and(j<=b)dobeginif c[i]>=c[j]thenbeginp:=p+1;d[p]:=c[i];e[p]:=q[i];i:=i+1;endelsebeginp:=p+1;d[p]:=c[j];e[p]:=q[j];j:=j+1;inc(ans[e[p]],mid-i+1);end;end;while(i<=mid)and(j>b)dobeginp:=p+1;d[p]:=c[i];e[p]:=q[i];i:=i+1;end;while(i>mid)and(j<=b)dobeginp:=p+1;d[p]:=c[j];e[p]:=q[j];j:=j+1;end;for i:=a to b dobeginc[i]:=d[i-a+1];q[i]:=e[i-a+1];end;end;beginreadln(n);for i:=1to n dobeginread(c[i]);q[i]:=i;end;merge(1,n);for i:=1to n-1dowrite(ans[i],’,’);writeln(ans[n]);end.输入:543125输出:四.程序填空(前5空,每空2分,后6空,每空3分,共28分)1.问题描述:小明手头有一份红十字会的捐款名单,但是这份名单被外星人恶意破坏过,你的任务是帮助小明去恢复这份名单。
由于外星人低估了你的智商,破坏的规则非常简单,先是将姓名和捐款金额联接到一行,再将这一行内容按顺序切成多行。
输入格式:有很多行,表示输入的字符串。
输出格式:输出共有多行,其中每一个人的信息一行,分别是姓名和金额,中间用空格隔开。
输入样例:zhangsan890liuhua111输出样例:zhangsan890liuhua111vars,t:ansistring;x,len,i:longint;flag:boolean;begins:=‘‘;while not⑴dobeginreadln(t);s:=s+t;end;len:=length(s);t:=‘‘;x:=0;flag:=false;for i:=1to len dobeginif(s[i]<=‘9’)and(s[i]>=‘0’)thenbeginx:=⑵+ord(s[i])–ord(‘0’);if flag=false then⑶;endelsebeginif flag=true thenbegin⑷;x:=0;t:=‘‘;⑸;end;t:=t+s[i];end;end;writeln(t,‘‘,x);end.2.问题描述:有一天小明来到一台神奇的取款机前,取款机可以无限提供某些特定面额的货币,小明想知道他要取出x元共存在几种不同的方案(取出顺序的不一样认为是相同的方案,具体以样例为准)。
输入格式:第一行一个整数m,表示提供的货币种数。
第二行共m个用空格隔开的数字,表示其具体面额。
第三行一个整数x,表示需要取出的钱额。
输出格式:输出一个整数,表示方案数。
输入样例:31254输出样例:3输出说明:取出4元的3种方案分别为(2,2),(1,1,2),(1,1,1,1)。
vardp:array[⑹..10001]of longint;a:array[1..10]of longint;i,j,x,m:longint;beginread(m);for i:=1to m do read(a[i]);⑺;fillchar(dp,sizeof(dp),0);dp[0]:=⑻;for i:=1to m dofor j:=0to x dobeginif⑼then break;if dp[j]=0then⑽;dp[j+a[i]]:=dp[j+a[i]]+⑾;end;writeln(dp[x]);end.。