高中信息学竞赛各种问题求解试题及答案.docx
- 文档编号:25712795
- 上传时间:2023-06-11
- 格式:DOCX
- 页数:40
- 大小:37.06KB
高中信息学竞赛各种问题求解试题及答案.docx
《高中信息学竞赛各种问题求解试题及答案.docx》由会员分享,可在线阅读,更多相关《高中信息学竞赛各种问题求解试题及答案.docx(40页珍藏版)》请在冰豆网上搜索。
高中信息学竞赛各种问题求解试题及答案
高中信息学竞赛各种问题求解试题及答案
第1题(5分),将n个不同颜色的球放人k个无标号的盒子中(n>=k,且盒子不允许为空)的方案数为S(n,k),例如:
n=4,k=3时,S(n,k)=6。
当n=6,k=3时,S(n,k)=________。
答案:
0k S(n,k)=1k=1 S(n-1,k-1)+k*S(n-1,k)n>=k>=2 第2题(5分),有5本不同的数学书分给5个男同学,有4本不同的英语书分给4个女同学,将全部书收回来后再从新发给他们,与原方案都不相同的方案有________种。 答案: 5! *4! +D(5)*D(4)=1140480 其中: D(n)=(n-1)*(D(n-1)+D(n-2))(n>2) D (1)=0D (2)=1 第3题(6分),把三角形各边分成n等分,过每一分点分别做各边的平行线,得到一些由三角形的边和这些平行线所组成的平行四边形。 n为已知整数,能组成_______个平行四边形。 答案: 3*C(n+2,4) 第4题(6分),由a,b,c3个不同的数字组成一个N位数,要求不出现两个a相邻,也不出现两个b相邻,这样的N位数的个数为AN,用AN-1和AN-2表示AN的关系式为: AN=_______________。 答案: AN=2*AN-1+AN-2 第5题(6分),在m*n的棋盘上,每个方格(单位正方形,即边长为1的正方形)的顶点称为格点。 以格点为顶点的多边形称为格点多边形。 若设格点凸N边形面积的最小值为gn,格点凸N边形内部(非顶点的)格点的个数的最小值为fn,则gn和fn的关系式为: gn=___________。 答案: Gn=fn+N/2-1(N>=3) 第6题(4分),编号为1到13的纸牌顺时针排成一圈,有人从编号为1的牌从数字1开始顺时针数下去,1、2、3、…、20、21、…,一圈又一圈。 问: 当数到数字N时,所在纸牌的编号为多少? 答案: 1+(N-1)mod13 第7题(8分),有位小同学喜欢在方阵中填数字,规则是按下图示例从右上角开始,按斜线填数字,碰到边界就重新。 显然,数字1在坐标(1,5)位置,数字25在坐标(5,1)位置。 后来这位小朋友想知道,对于N阶的方阵,随机取一个位置(x,y),并规定x≤y,问这个位置上应该填的数字是多少? 5阶方阵的 示例图如下: 117421 1612853 20171396 2321181410 2524221915 答案: (N-y+x)*(N-y+x-1)/2+x 第8题(5分),设有质量为1、3、9、27、81、…3ng...的砝码各一枚,如果砝码允许放在天平的两边,则用它们来称物体的质量,最多可称出1g到3n+3n/2g之间的所有质量,如n=4时,可称出18到121g之间的所有质量;当物体质量为M=14时,有14+9+3+1=27,即天平一端放M=14g的物体和9g、3g、1g的砝码,另一端放27g的砝码,即可称出M的质量。 当M=518g时,请你写出称出该物体的质量的方法,并用上述所示的等式来表示。 答案: 518+243+3+1=729+27+9 第9题(7分),在圆周上有N个点(N>=6),在任意两个点之间连一条弦,假设任何3条弦在圆的内部都没有公共点,问这些弦彼此相交能在圆内构成多少个三角形(只要求写出三角形总数的表示式而无需化简)? 提示: 下图是N=6的情况,图中所示的4个三角形从某种意义上说具有一定的代表性。 答案: C(N,3)+4*C(N,4)+5*C(N,5)+6*C(N,6) 第10题(6分),用1个或多个互不相同的正整数之和表示1~511之间的所有整数 ①至少要多少个不同的正整数_________________; ②这些正整数是_______________ 答案: ①9 ②1,2,4,6,16,32,64,128,256 第11题(7分),在有m行n列格子的棋盘内,一枚棋子从棋盘的左上角格子沿上、下、左、右方向行走,最后走到棋盘的右下角格子。 该棋子走过的格子数为奇数的充分必要条件是________________ 答案: m+n为偶数 完善程序试题及其答案 第1题(14分)以下程序是将一组整数按从小到大的顺序排列。 排序的方法是将长度为n的数a分为两个长度分别为(ndiv2)与(n-ndiv2)的子数组a1,a2。 然后递归调用排序过程,将a1,a2分别排序,最后将a1,a2归并成数组a。 例如a=(3,1,2,4),那么a1=(3,1),a2=(2,4)。 调用排序过程将a1,a2排序,得到a1=(1,3),a2=(2,4),然后进行合并排序。 从键盘输入数的长度n以及n个整数,存在数组a中,调用子过程sort进行排序,最后输出排序结果。 programwsh; constmaxn=100;. typearr: array[1..maxn]ofinteger; var a: array[1..maxn]ofinteger; n,i: integer; proceduresort(n: integer;vara: arr); var i,p1,p2,n1,n2: integer; a1,a2: arr; begin ifn=1thenexit; fillchar(a1,sizeof(a1),0); fillchar(a2,sizeof(a2),0); n1: =0;n2: =0; n1: =ndiv2;n2: =(____ (1)____); fori: =1ton1doa1[i]: =a[i]; fori: =1ton2doa2[i]: =____ (2)____; ____(3)____; sort(n2,a2); p1: =1;p2: =1; n: =0; while(p1<=n1)and(____(4)____)do begin n: =n+1; if____(5)____ thenbegina[n]: =a1[p1];inc(p1);end elsebegin____(6)____;inc(p2);end; end; ifp1<=n1 thenfori: =____(7)____ton1dobeginn: =n+1;a[n]: =a1[i]end elsefori: =p2ton2dobeginn: =n+1;a[n]: =a2[i];end; end; begin write('n='); readln(n); fori: =1tondoread(a[i]); readln; sort(n,a); fori: =1tondowrite(a[i],''); writeln; end. 答案: n-n1 a[n1+i] sort(n1,a1) (p2<=n2) a1[p1] a[n]: =a2[p2] p1 第2题(8分)有n(1≤n≤100)个同学种m(1≤n≤m≤100)种小树苗,例如: 4个同学(1、2、3、4)每小时种4种树苗(A、B、C、D)的数量估算如下表所示,编程输出每人种1种苗所用的总时间最少的安排方案和所花费的时间。 学生ABCD 15245 24353 35242 43233 programwsh; const maxn=100;maxm=100; var a: array[1..maxn,1..maxm]ofinteger; m,n: integer; i,j,t: integer; procedurework(k,t1: integer); vari: integer; begin if____ (1)____then begin ift1 =t; exit; end; fori: =___ (2)___to___(3)___do work(k+1,___(4)___); end; begin readln(n,m); fori: =1tondo begin forj: =1tomdoread(a[i,j]); readln end; t: =maxint; work(1,0); writeln(t) end. 答案: k>n 1 m t1+t[k,i] 第3题(10分)程序的任务是用0…9中的数字填入如下乘法运算的*处,数字可重复使用,且所用的数字至少有一个是素数,要求输出满足下列算式的方案数。 *** x** ------------------------- *** *** ------------------------- *** programwsh; constp: setof0...9=[2,3,5,7]; var s: setof0..9; n: integer; ans: longint; f: text; procedureinit; var i: integer; t: byte; begin readln(n); s: =[]; fori: =1tondo begin read(t); s: =s+[t]; end; close(f); end; functionok(x,l: integer): boolean;{此函数判断x是否符合条件} vart: byte; begin ok: =false; if___ (1)___<>lthenexit; whilex<>0do begin t: =xmod10; ifnot(tins)thenexit; x: =xdiv10; end; ok: =true; end; functioninset(x: integer): boolean;{此函数判断x中是否包含素数字} vart: byte; begin inset: =false; while___ (2)___do begin t: =xmod10; iftinpthen begin inset: =true; exit; end; ___(3)___; end; end; procedurework; vari,i1,i2,i3,j1,j2: integer; begin ans: =0; fori1: =1to9do ifi1insthen fori2: =1to9do ifi2insthen fori3: =1to9do ifi3insthen begin ___(4)___; forj1: =1to9do if(j1ins)andok(j1*i,3)then forj2: =1to9do if(j2ins)andok(j2*i,3)and___(5)___then begin if(i1inp)or(i2inp)or(i3inp) or(j1inp)or(j2inp)orinset(j1*i)orinset(j2*i) theninc(ans); end; end; writeln(ans); end; begin init; work; end. 答案: trunc(ln(x)/ln(10))+1 x>0 x: =xdiv10 i: =i1*100+i2*10+i3 ok(j1*i*10+j2*i,4) 第4题(15分)下列程序是对冒泡排序的一种改进,数组elem中有n个元素elem[1]、elem[2]…、elem[n]。 要排序的关键字是key。 先从一端开始扫描,进行比较、交换,然后改变下一趟的扫描方向进行同样的处理。 请完善下面的过程。 programwsh; type Td=record key: integer; inf: real; end; var elem: array[1..1000]ofTd; n,i: integer; procedureshakesort(n: integer); var i,t,h: integer; c: boolean; temp: Td; begin h: =1; t: =n; repeat ____ (1)____; fori: =htot-1do ifelem[i].key>elem[i+1].keythenbegin temp: =elem[i]; elem[i]: =elem[i+1]; elem[i+1]: =temp; ____ (2)____; end; ____(3)____; fori: =t-1downtohdo ifelem[i].key>elem[i+1].keythenbegin temp: =elem[i]; elem[i]: =elem[i+1]; elem[i+1]: =temp; ____(4)____; end; ____(5)____; untilc; end; begin{主过程} …{略} end. 答案: c: =true c: =false t: =t-1 c: =false h: =h+1 第5题(15分)读入一个10x10的数字矩阵,矩阵中的数字各不相同,输出这个矩阵经过旋转、翻转后的7种不同样式。 programwsh; var matrix: array[0..7,1..10,1..10]ofinteger; lr,lc,which: integer; procedureoverturn(which: integer); var lr,lc: integer; begin forlr: =1to10do forlc: =1to10do matrix[which,lr,lc]: =matrix[which-1,___ (1)___,___ (2)___]; end; procedurerotate(which: integer); var lr,lc: integer; begin forlr: =1to10do forlc: =1to10do matrix[which,lr,lc]: =matrix[which-1,___(3)___,___(4)___]; end; begin forlr: =1to10do forlc: =1to10do read(matrix[0,lr,lc]); readln; forwhich: =1to7do begin if___(5)___thenoverturn(which) elserotate(which); forlr: =1to10do begin forlc: =1to10do write(matrix[which,lr,lc]: 3); writeln; end; readln; end; end. 答案: 11-lr lc 11-lc lr which=4 第6题(16分)[问题描述]在n个元素的集合S中,找最大和最小元素(设n的值为2m). [解题思路]把集合S分成两个子集S1和S2,每个子集有n/2个元素.应用递归过程search(S,Y,MAX,MIN)(S中有2k个元素),过程返回一对(MAX,MIN)值,为最大和最小元素,最后,把S1和S2中的最大和最小元素进行比较,从而得到S中的最大和最小元素. [程序] programwsh; typedata=array[1..256]ofbyte; jh=setofbyte; vars,ss: jh; a: data; i,j,d,largest,smallest: byte; functionsq(k: byte): byte; begin ifk=1thensq: =2elsesq: =2*sq(k-1); end; procedureseareh(x: jh;y: byte;varmax,rain: byte); vark,p,w,nxl,nx2,ni1,ni2,n: byte; m: array[1..2]ofbyte; s1,s2: jh; begin ify=2then begin p: =0; fork: =1toido if___ (1)___then begin p: =p+1;m[p]: =___ (2)___; end; if___(3)___then begin w: =m[1];m[1]: =m[2];m[2]: =w; end; max: =m[1];min: =m[2];exit; end else begin si: =[];n: =O;y: =___(4)___; fork: =1toido if___(5)___then begin n: =n+1;ifn<=ythens1: =___(6)___; end; s2: =___(7)___; search(s1,y,nx1,ni1);search(s2,y,nx2,ni2); ifnx1>nx2thenmax: =nx1elsemax: =nx2; ifni1 =ni1elsemin: =ni2; end end; begin i: =0;s: =[];ss: =[]; forj: =1to7doss: =ss+[sq(j)]; writeln('enter2^ndata: '); repeat whilenoteolndo begin i: =i+1;read(d); if___(8)___theni: =i-1 elsebegin a[i]: =d;s: =s+[a[i]]; end; end;readln; untiliinss; search(s,i,largest,smallest); writeln('largest-data: ',largest,'smallest-data: ',smallest) end. 答案: a[k]inx m[p]: =a[k] m[1]<=m[2] y: =trunc(y/2) a[k]inx s1: =s1+[a[k]] s2: =x-s1 dins 第7题(14分)[问题描述]将一个含有运算符为: (、)、+、-、*、/、^(乘幂运算)、~(求负运算)的中缀表达式,如: ((1+2)*5)^2-(3+5)/2转化为后缀表达式,如: 12+5*2^35+2/-. [解题思路]将中缀表达式转化为后缀表达式,首先规定运算 符的优先数如下: ┌───┬───┬───┬─────┬──────┬───┬───┐ │运算符│(│)│+,-│*,/│~│~│ ├───┼───┼───┼────┼──────┼───┼───┤ │优先数│0│1│2│3│4│5│ └───┴───┴───┴─────┴──────┴───┴───┘ 1.若输入是运算量,则将该运算量输出; 2.若是左括号“(”,则将该符号的优先数压入设置的运算符堆栈e[p]中去; 3.输入运算符优先数是2,3,4,5时,如果栈空,则将运算符的优先数进栈。 如果栈不空,则将它与栈顶元素进行比较,倘若优先数大于栈顶元素的优先数,则进栈;小于顶元的,则顶元退栈并输出该运算符,然后再继续比较,直到大于顶元或栈空时进栈; 4.若是右括号“)”,同时栈顶元又为左括号“(”,则栈顶元退栈,并抹去右括号“)”.否则转3处理; 5.输入完而栈非空,则将栈内内容逐一退栈并输出。 所有输出的结果就为后缀表达式。 过程中用到的相关数据结构如下: typearraydata=array[1..100]ofstring[20]; constfh: array[1..8]ofstring[1] =('(',')','+','-','*','/','~','^'); b: array[1..8]ofbyte=(0,1,2,2,3,3,4,5); vard: arraydata;{存储运算量及运算符号} i,j,m,k: byte; [过程程序] procedurehzbds(vard: arraydata;varm: byte); var: array[1'-.100]ofbyte; i,p,k,bi: byte; bl: boolean; begin p: =O;k: =1;bj: =0; whilek<=mdo begin if___ (1)___then begin p: =p+1;e[p]: =1 end elsebegin fori: =2to8do if___ (2)___then begin b1: =true; repeat if___(3)___then begin p: =p+1;e[p]: =i;bj: =1;b1: =false end elseif____(4)___then ife[p]<>1then begin p: =p+1;e[p]: =i;bj: =1;b1: =false end elseifd[k]<>')'then begin p: =p+1;e[p]: =i;bj: =1;b1: =false end elsebegin ___(5)___;bj: =1;b1: =false; end elsebegin write(fh[e[p]],'');p: =p-1 end; untilb1=false; end if___(6)___thenwrite(d[k],'')elsebj: =0; end; k: =k+1 end b1
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 高中 信息学 竞赛 各种 问题 求解 试题 答案