信息奥赛竞赛题库含答案.docx

上传人:李司机 文档编号:6955406 上传时间:2024-03-26 格式:DOCX 页数:28 大小:57.61KB
返回 下载 相关 举报
信息奥赛竞赛题库含答案.docx_第1页
第1页 / 共28页
信息奥赛竞赛题库含答案.docx_第2页
第2页 / 共28页
信息奥赛竞赛题库含答案.docx_第3页
第3页 / 共28页
信息奥赛竞赛题库含答案.docx_第4页
第4页 / 共28页
信息奥赛竞赛题库含答案.docx_第5页
第5页 / 共28页
点击查看更多>>
资源描述

《信息奥赛竞赛题库含答案.docx》由会员分享,可在线阅读,更多相关《信息奥赛竞赛题库含答案.docx(28页珍藏版)》请在三一办公上搜索。

1、信息奥赛题库-【信息奥赛题库】编制组打印杨辉三角前10行标程programyhsj10;varyh:array1.10,0.10ofinteger;i,j:integer;beginyhl,l:=l;fori:=2to10doforj:=ltoidoyhij:=yhi-l,j+yhi-l,j-l;fori:=ItoIOdobeginforj:=ltoidowrite(yhi,j;,);writein;end;End.2 .读入10个数,输出偶数项及它们和,输出奇数项及它们的平均数。(读入10个数输出偶数项及它们和输出奇数项及它们的平均数)标程programexe6_l;vari,s,t,n:i

2、nteger;a:array1.10ofinteger;beginfori:=lto10doread(ai);fbri:=ltoIOdoifimod2=0thenbeginwrite(ai;);s:=s+ai;end;writeln(s);fbri:=ltoIOdoifimod20thenbeginwrite(ai;);tz=t+ai;n:=n+l;end;writeln(tn);end.3 .读入n个数,打印其中的最大数及其位置号(读入n个数打印其中的最大数及其位置号)标程programexe6_2;VaMmaX,min,t,n:integer;a:array1.10ofinteger;be

3、ginfori:=lto10doread(ai);max:=al;min:=al;t:=l;n:=l;fori:=2to9dobeginifmaaithenbeginmin:=ai;n:=l;end;end;writeln(maxjzt);writeln(min/,n);end.4 .交换a和b的值标程programpl_l;varazb/X:integer;beginread(azb);x:=a;a:=b;b:=x;writeln(a,b);End.Problem1:IeaderZ谁是组长2问题描述八中信息组需要选一个组长。信息组一共有n个人,分别用1到n编号,其中m个人参与了投票。得票数过

4、半(票数大于mdiv2)的人将被选为组长。输入数据将告知这m个人分别将票投给了谁,请统计出谁将担任八中信息组的组长。输入数据第一行两个数n和m。第二行有m个数,这些数都是不超过n的正整数,表明这m个人的选择。输出数据输出将被选为组长的人。如果没有人的票数过半,请输出-1。输入样例Q47727输出样例7时间限制各测试点1秒内存限制你的程序将被分配32MB的运行空间数据规模l=n=maxlongintl=m=l000000考察内容查找第k大元素programleader2;vara:array1.1000000ofIongint;n,m:Iongint;procedurereadp;vari:Io

5、ngint;beginreadln(n,m);fori:=1tomdoread(ai);end;procedureswap(vartlzt2:Iongint);vart3:Iongint;begint3:=tl;tl:=t2;t2:=t3;end;functionfind(1,r,k:Iongint):Iongint;vari,j,mid:Iongint;beginifl=rthenexit(a1);i:=1;j:=r;mid:=a(ij)div2;repeatwhileaimiddodec(j);ifij;if(1=j)and(k=j)thenexit(find(1,jzk);if(i=i)

6、thenexit(find(i,r,k);exit(mid);end;functionleader(x:Iongint);boolean;vari,count:Iongint;begincount:=O;fori:=1tomdoifai=xtheninc(count);exit(countmdiv2);end;=main=varx:Iongint;beginassign(input,leader2.in,);reset(input);assign(output,leader2.out,);rewrite(output);readp;x:=find(1,mzmdiv2);ifleader(x)t

7、henwritein(x)elsewritein(-1);close(input);close(output);End.Problem2:typewrt有故障的打字机问题描述一台打字机准备将1到IoAn的数依次打出。在打印过程中,这台打字机出现了一个故障:数字“3”打不出来。因此,所有含有数字“3”的数都没有被正确地打出。试问没有被正确打出的数一共有多少个。输入数据输入一个正整数n。输出数据输出从1到10n这些数中不能被正确打印的数的个数。输入样例2输出样例19时间限制各测试点1秒内存限制你的程序将被分配32MB的运行空间数据规模n0thenans0:=a0+1elseans0:=a0;exi

8、t(ans);end;=main=varizn:integer;ans:arr;beginassign(input,typewrt.in,);reset(input);assign(output,ftypewrt.out);rewrite(output);readln(n);ans0:=1;ans1:=1;fori:=1tondoans:=mul(ans,9);fori:=ndownto2dowrite(9-ansi);writein(10-ans1);close(input);close(output);End.Problem3:maxsum最大约数和问题描述选取和不超过S的若干个不同的正整

9、数,使得所有数的约数(不含它本身)之和最大。输入数据输入一个正整数S。输出数据输出最大的约数之和。样例输入11样例输出9样例说明取数字4和6,可以得到最大值(1+2)+(1+2+3)=9时间限制各测试点1秒内存限制你的程序将被分配32MB的运行空间数据规模S=0)and(fi-l,j-i+aifi,j)thenfizj:=fi-lzj-i+ai;end;end;=main=三=vari:Iongint;beginassign(input,maxsum.in,);reset(input);assign(output,masum.out,);rewrite(output);readln(s);fo

10、ri:=1tosdoai:=sum(i);solve;writein(fs,s);close(input);close(output);end.Problem4:flu流感会结束吗问题描述八中一共有11个学生。这n个学生里一共有m对朋友关系。在流感发作期,每个健康学生都要看望当天他生病的朋友(如果有的话),并在第二天被传染上疾病(除非他在免疫期内);每个生病的学生在第二天都会痊愈,并在这一天具有免疫性。从第三天起,看望生病的朋友将再次使他染上流感。初始时(第一天),只有一个学生患有流感。试问多少天后流感会自动结束。输入数据第一行输入两个正整数n和mo接下来m行每行两个正整数x,y,表示编号为X

11、的学生和编号为y的学生是一对朋友。输入数据保证每一对朋友关系只描述一次。最后一行输入一个正整数,代表初始时患有流感的学生的编号。输出数据如果流感永远不会结束,请输出-1,否则输出多少天后流感会结束。答案保证不超过2OOO000OOO0样例输入441 22 33 4241样例输出3样例说明第一天1号学生生病,2号学生访问他;第二天2号学生生病,其它三个学生访问他,由于1号处于免疫期,未患流感;第三天3、4号学生生病,2号学生访问他们。第四天3、4号学生痊愈,流感结束。时间限制各测试点1秒内存限制你的程序将被分配32MB的运行空间数据范围njm=100OOOo考察内容图的宽度优先遍历program

12、flu;typepointer=recl;recl=recordvalue:Iongint;next:pointer;end;rec2=recordnode,step:Iongint;end;varconnect:array1.100000ofpointer;queue:array1.100000ofrec2;hash:array1.100000ofboolean;n,m,t:Iongint;procedureinsert(x,y:Iongint);vartmp:pointer;beginnew(tmp);tm.value:=x;tmp.next:=connecty;connecty:=tmp

13、;end;procedureread;vari,x,y:Iongint;beginreadln(n,m);fori:=1tomdobeginreadln(x,y);insert(x,y);insert(y,x);end;readln(t);end;proceduresolve;varclosed,open:Iongint;tmp:pointer;beginCloSed:=0;open:=1;queue1.node:=t;queue1.step:=1;hasht:=true;repeatclosed:=closed+1;tmp:=connectqueueclosed.node;whiletmpn

14、ildobeginifnothashtmp.valuethenbeginhashtmp.value:=true;open:=oen+l;queueopen.node=tm.value;queueopen.step:=queueclosed.step+1;end;tmp:=tmp.next;end;untilclosed=open;writein(queueopen.step);end;beginassign(input,flu.in,);reset(input);assign(output,flu.out,);rewrite(output);readp;solve;close(input);c

15、lose(output);End.从键盘输入10个数,将这10个数逆序输入,并求这10个数的和,输出这个和。programpl;vara:array1.10ofinteger;i,Siinteger;beginfori:=lto10doread(ai);fori:=10downto1dowrite(ai/);writein;s:=0;fori:=lto10dos:=s+ai;writeln(s=,s);end.用筛法求IOo以内的素数(质数)。分析:素数是除了1和它本身以外没有其它约数的数。用谛法求素数的方法是:用质数筛去合数:从第一个素数2开始,把它的倍数去掉;这样2以后的第一个非0数就一定

16、也是素数,把它的倍数也删了重复这个删数过程,直到在所找到的素数后再也找不到一个非。数。把所有非。数输出。programp2;vara:array1.100ofinteger;ij,kinteger;beginfori:=lto100doai:=i;a(l:=0;i:=2;whilei=100dobegink:=i;whilek=100dobegink:=k+i;ak:=0;end;i:=i+l;whileai=0doi:=i+l;end;fori:=lto100doifai0thenwrite(ai/);end.竞赛小组共有20位同学,这学期每位同学共参与了三项比赛,请统计每位同学的平均分。分

17、析:定义一个20行3列的二维数组来存放这些成绩。定义一个20个元素的一维数组来存放平均分。programpl;vara:array1.20,13ofinteger;b:array1.20ofreal;izjinteger;beginfori:=lto20dobeginforj:=lto3doread(aij);readln;end;fori:=lto20dobi:=0;fori:=lto20dobeginforj:=lto3dobi:=bi+aij;bi:=bi/3;end;fori:=lto20dowrite(bi:5:l);writeln;end.求n个自然数的最大公约数;programg

18、cdl;constmaxn=100;varn,i,gcd:integer;a:arrayl.maxnofinteger;procedureenter;beginwrite(n=(0;end;procedurefind-gcd(xzyunteger);varr:integer;beginr:=xmody;whiler0dobeginx:=y;y:=r;r:=xmody;endgcd:=y;end;procedureprint;beginwriteln(,GCD=,gcd);end;beginenter;gcd:=a(l;fori:=2tondofind-gcd(gcdzai);print;end

19、.编一程序,求从10名同学中选出3名代表,有几种不同的选法。(公式:C(mzn)=m!n!*(m-n)!JAm中选n)programzohel;varm,n:integer;c:longint;functionfactor(x:integer):longint;vari:integer;p:longint;beginP:=l;fori:=ltoxdop:=p*i;factor:=p;end;beginwrite(m,n=)eadln(mzn);c:=factor(m)div(factor(n)*factor(m-n);WriteIn(,c(,m,J,n,)=,c);end.例4:全局变量和局部

20、变量。programlocal_global;vari,k:integer;proceduresubl;varij:integer;begini:=17;writeln(iinsub=,zi);writeln(,kinsub=,zk);end;begini:=2;k:=9;writeln(iinmain=,J);writeln(kinsub=,zk);subl;writeln(,iinmain=,zi);writeln(,jinmain=,J);readln;end.1、验证卡布列克运算。(cab.pas)任意一个四位数,只要它们各个位上的数字是不全相同的,就有这样的规律:1)将组成该四位数的

21、四个数字由大到小排列,形成由这四个数字构成的最大的四位数;2)将组成该四位数的四个数字由小到大排列,形成由这四个数字构成的最小的四位数(如四个数中含有0,则得到的数不足四位);3)求两个数的差,得到一个新的四位数(高位零保留)。重复以上过程,最后得到的结果是6174,这个数被称为卡布列克数请你写一个程序,计算一个四位数经过上述运算最后得到卡布列克数所需的步数.输入文件:cab.in文件包含一行数据,即一个四位正整数。输出文件:cab.out文件包含一个整数,即步数。Programcab;varczt:array1.4ofinteger;ijztmPStepdnteger;s:array1.4o

22、fchar;beginfori:=lto4doread(si);readln;fori:=4downto1dociz=ord(s5-i)-ord(,0);step:=0;while(cl4)or(c27)Or(C1)or(C6)dobeginfori:=lto3doforj:=i+lto4doifcicjthenbegintemp:=ci;ci=cj;cj:=tempend;fori:=lto4doti:=c5-i;fori:=lto4dobeginci=ci-ti;j:=i;whilecjOdobegincj:=cj+10;j:=j+l;endend;step:=step+lend;writ

23、eln(step);end.2、最大整数。(string.pas)设有n个正整数(n30000),将它们联接成一排,组成一个最大的多位整数。例如:n=3时,3个整数13,312,343联接成的最大整数为:34331213又如:n=4时,4个整数7,13,4,246联接成的最大整数为:7424613输入文件:s.in文件第一行包含一个正整数,即正整数的个数n,文件第二行为n个正整数,各数之间用空格分隔。输出文件:s.out文件包含一行数据,即联接成的多位数。varaarrayl.30000ofstring;n,ijzkzcode,mjnteger;s:string;beginreadln(n);

24、fori:=ltondobeginread(k);str(k,ai);end;fori:=ndownto2dobeginforj:=ltoi-1doif(a+aj+l)(aj+l+aj)thenbegins:=aj;aj:=aj+l;aj+l:=s;end;end;.fori:=ltondowrite(ai);end.3、蛇形方阵。(snake.pas)任给n,试按如下方式对AIJ赋值,例如:Entern:6126715163581417264913182527101219242833112023293234212230313536输入文件:snake.in文件包含一个正整数,即阶数n。输出文

25、件:snake.out文件包含n行,每行n个数的蛇形方阵。varn,i,jj,c,Icinteger;beginreadln(n);fori:=ltondobeginforj:=ltondobeginifi+j=n+lthenk:=(i+j-2)*(i+j-l)div2+(i+j)mod2*i+(i+j-l)mod2*jelsebeginr:=n+l-i;c:=n+l-j;k:=n*n+l-(r+c-2)*(r+c-l)div2-(r+c)mod2*r-(r+c-l)mod2*c;end;write(k:4);end;writein;end;end.4、谁拿了最多奖学金(SCholar.pas

26、)某校的惯例是在每学期的期末考试之后发放奖学金。发放的奖学金共有五种,获取的条件各自不同:1)院士奖学金,每人8000元,期末平均成绩高于80分(80),并且在本学期内发表1篇或1篇以上论文的学生均可获得;(85),并且班级评议2)五四奖学金,每人4000元,期末平均成绩高于85分成绩高于80分(80)的学生均可获得;3)成绩优秀奖,每人2000元,期末平均成绩高于90分(90)的学生均可获得;4)西部奖学金,每人100o元,期末平均成绩高于85分(85)的西部省份学生均可获得;5)班级贡献奖,每人850元,班级评议成绩高于80分(80)的学生干部均可获得;只要符合条件就可以得奖,每项奖学金的

27、获奖人数没有限制,每名学生也可以同时获得多项奖学金。例如姚林的期末平均成绩是87分,班级评议成绩82分,同时他还是一位学生干部,那么他可以同时获得五四奖学金和班级贡献奖,奖金总数是4850元。现在给出若干学生的相关数据,请计算哪些同学获得的奖金总数最高(假设总有同学能满足获得奖学金的条件)。【输入文件】输入文件SChoIar.in的第一行是一个整数N(l=N=100),表示学生的总数。接下来的N行每行是一位学生的数据,从左向右依次是姓名,期末平均成绩,班级评议成绩,是否是学生干部,是否是西部省份学生,以及发表的论文数。姓名是由大小写英文字母组成的长度不超过20的字符串(不含空格);期末平均成绩

28、和班级评议成绩都是0到100之间的整数(包括0和100);是否是学生干部和是否是西部省份学生分别用一个字符表示,Y表示是,N表示不是;发表的论文数是0到10的整数(包括0和10)。每两个相邻数据项之间用一个空格分隔。【输出文件】输出文件Scholanout包括三行,第一行是获得最多奖金的学生的姓名,第二行是这名学生获得的奖金总数。如果有两位或两位以上的学生获得的奖金最多,输出他们之中在输入文件中出现最早的学生的姓名C第三行是这N个学生获得的奖学金的总数。【样例输入】4YaoLin8782YN0ChenRuiyi8878NY11.iXin9288NN0ZhangQin8387YN1【样例输出】C

29、henRuiyi900028700programscholar;varname:array1.100ofstring;al,a2,a5array1.100ofIongint;a3,a4:array1.100ofchar;n,i,max,total,p:IOngint;maxname:string;chxhar;beginreadln(n);fori:=ltondobeginread(ch);whilech,dobeginnamei:=namei+ch;read(ch);end;readln(aliza2i,ch,a3i,ch,a4izch,a5i);end;fori:=ltondobeginp

30、:=0;if(ali80)and(a5i=l)theninc(pz8000);if(ali85)and(a2i80)theninc(p,4000);if(ali90)theninc(p,2000);if(ali85)and(a4i=,Y,)theninc(p,1000);if(a2i80)and(a3i=Y)theninc(p,850);ifpmathenbeginmax:=p;maxname=namei;end;inc(total,p);end;writeln(maname);writeln(max);writeln(total);end.奇数魔方阵把整数1到n(n为奇数)排成一个n*n方阵

31、,使方阵中的每一行每一列以及对角线上的数之和都相同programjsmfz;varmagic:array1.100,1.100ofinteger;i,j,k,h,I,rinteger;beginread(n);fori:=ltondoforj:=ltondomagic(i,j:=0;k:=l;i:=l;j:=ndiv2+1;magicij:=k;whilekn*ndobegink:=k+l;h:=i-l;ifI=Othenl:=n;ifmagic(hj=thenbeginmagichj:=k;i:=h;j:=l;endelsebeginmagici+lj:=k;i:=i+l;end;end;f

32、ori:=ltondobeginforj:=ltondowrite(magicizj3);writein;end;end.输入50名学生4门功课的成绩,输出各人各科成绩及总分programcj;varaarray1.50zlOfinteger;i,j:integer;beginfori:=lto50doforj:=lto5doread(ai,j);fori:=lto50doforj:=2to5doa(L6=aiz6+ai,j;fori:=lto50dobeginforj:=lto6dowrite(aij;,);writein;end;End.稀疏矩阵化简programsjz;constn=5;

33、varaarray(l.n,l.ofinteger;barray1.100z1.3ofinteger;ij,k:integer;beginfori:=ltondoforj:=ltondoread(a(ij);k:=0;fori:=ltondoforj:=ltondoifa(izjOthenbegink:=k+l;bkzl:=i;bk,2:=j;bk,3:=a(ij;end;fori:=ltokdobeginforj:=lto3dowrite(bij:3);end;End.将a和b中大的值给max的程序programpl_2;vara,b,max:integer;beginread(a,b);m

34、ax:=a;ifbmaxthenmax:=b;writeln(max);End.给定一个正整数n,判定它是否为素数的程序programpl_3;variznzrzwinteger;beginread(n);w:=0i:=2;repeatr:=nmodi;ifr=0thenw:=l;i:=i+l;until(in-l)or(w=l);ifw=0thenwriteln(yes)elsewriteln(,no,)End.输入两个数a.b,输出较大的数。programtt;vara,b:integer;beginreadln(a,b);ifabthenwriteln(a)elsewriteln(b);

35、end.某全自动加油站a,b,c三种汽油的单价(元kg)分别是1.50、1.35和L18,也提供了“自己加”或“协助加”两个服务等级,这样用户可以得到5%或10%的优惠。编一个程序,用户输入加油量、汽油品种和服务类型(f-自动,m-自己,e-协助),然后计算应付款。programpcasel;varoil,helpxhar;kgztotakreal;beginWritefEntertheamountinkilograms(kg):);readln(kg);write(,Whichtypeofthegasoline(a,bC):);readln(oil);wirte(,Whichtypefors

36、ervice(fzmze):);readln(help);caseoilofa,:totak=1.50*kg;,b,:totak=1.35*kg;c:totak=1.18*kg;elseWritelnflnputError!)end;casehelpof,f,:;,m:totak=total*(l-0.05);,e:totak=total*(l-0.10);elseWritelnflnputError!)end;writeln;writeln(,Totalis,total:Io:2);end.从键盘上读入年和月,输出该月有多少天。programpcase2;varyearzmonth,dayi

37、nteger;runnian:boolean;beginwrite(,Enteryearandmonth:);readln(year,month);casemonthof1,3,5,7,8,10,12:day:=31;4,6,9,11:day:=30;2:beginrunnian:=(yearmod400=0)or(yearmod4=0)and(yearmod1000);caserunnianoftrue:day:=28;false:day:=29;end;end;end;end.从键盘输入10个数,将这10个数逆序输入,并求这10个数的和,输出这个和。programpl;vara:array

38、1.10ofinteger;izsunteger;beginfori:=lto10doread(ai);fori:=10downto1dowrite(aiz,);writeln;s:=0;fori:=lto10dos:=s+ai;writeln(s=zs);end.用筛法求100以内的素数(质数)。分析:素数是除了1和它本身以外没有其它约数的数。用筛法求素数的方法是:用质数筛去合数:从第一个素数2开始,把它的倍数去掉;这样2以后的第一个非0数就一定也是素数,把它的倍数也删了重复这个删数过程,直到在所找到的素数后再也找不到一个非0数。把所有非。数输出。programp2;vara:array1.

39、100ofinteger;ij,k:integer;beginfori:=lto100doai:=i;al:=0;i:=2;whilei=100dobegink:=i;whilek=100dobegink:=k+i;ak:=O;end;i:=i+l;whileai=0doi:=i+l;end;fori:=lto100doifai0thenwrite(ai/);end.下面是一个建立和使用文件的程序:programwenjian;constn=3;m=2;typestudent=recordname:string;score:arrayl.mof0.100;end;varst:arrayl.nofstudent;Stfileifileofstudent;sumst:arrayl.nofinteger;sumsub:arrayl.mofinteger;SUm:integer;procedurenewfile;variJJnteger;beginassign(stfilescore.fil,);rewrite(stfile);fori:=ltondobeginWritelnflnputstudentJnameand,mscore);readln(sti.name);forj:=lt

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号