信息奥赛竞赛题库含答案.docx
信息奥赛题库-【信息奥赛题库】编制组打印杨辉三角前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:integer;a:array1.10ofinteger;beginfori:=lto10doread(ai);fbri:=ltoIOdoifimod2=0thenbeginwrite(ai;');s:=s+ai;end;writeln(s);fbri:=ltoIOdoifimod2<>0thenbeginwrite(ai;');tz=t+ai;n:=n+l;end;writeln(tn);end.3 .读入n个数,打印其中的最大数及其位置号(读入n个数打印其中的最大数及其位置号)标程programexe6_2;VaMmaX,min,t,n:integer;a:array1.10ofinteger;beginfori:=lto10doread(ai);max:=al;min:=al;t:=l;n:=l;fori:=2to9dobeginifma×<aithenbeginmax:=ai;t:=l;end;ifmin>aithenbeginmin:=ai;n:=l;end;end;writeln(maxj'zt);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个人参与了投票。得票数过半(票数大于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:Iongint;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(i÷j)div2;repeatwhileai<middoinc(i);whileaj>middodec(j);ifi<=jthenbeginswap(ai,aj);inc(i);dec(j);end;untili>j;if(1<=j)and(k<=j)thenexit(find(1,jzk);if(i<=r)and(k>=i)thenexit(find(i,r,k);exit(mid);end;functionleader(x:Iongint);boolean;vari,count:Iongint;begincount:=O;fori:=1tomdoifai=xtheninc(count);exit(count>mdiv2);end;=main=varx:Iongint;beginassign(input,leader2.in,);reset(input);assign(output,leader2.out,);rewrite(output);readp;x:=find(1,mzmdiv2);ifleader(x)thenwritein(x)elsewritein(-1);close(input);close(output);End.Problem2:typewrt有故障的打字机问题描述一台打字机准备将1到IoAn的数依次打出。在打印过程中,这台打字机出现了一个故障:数字“3”打不出来。因此,所有含有数字“3”的数都没有被正确地打出。试问没有被正确打出的数一共有多少个。输入数据输入一个正整数n。输出数据输出从1到10n这些数中不能被正确打印的数的个数。输入样例2输出样例19时间限制各测试点1秒内存限制你的程序将被分配32MB的运行空间数据规模n<=1000考察内容高精度运算(乘法,高精度乘以单精度)programtypewrt;typearr=arrayO.1000ofinteger;functionmul(a:arr;b:integer):arr;vari:integer;ans:arr;beginfillchar(anszsizeof(ans),0);fori:=1toa0dobeginansi:=ansi+ai*b;ansi+l:=ansi+1+ansidiv10;ansi:=ansimod10;end;ifansa0+1>0thenans0:=a0+1elseans0:=a0;exit(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的若干个不同的正整数,使得所有数的约数(不含它本身)之和最大。输入数据输入一个正整数S。输出数据输出最大的约数之和。样例输入11样例输出9样例说明取数字4和6,可以得到最大值(1+2)+(1+2+3)=9°时间限制各测试点1秒内存限制你的程序将被分配32MB的运行空间数据规模S<=1000考察内容0/1背包programmaxsum;vara:array1.1000ofIongint;f:array0.1000,0.1000ofIongint;s:Iongint;functionsum(x:Iongint):Iongint;vari,ans:Iongint;beginans:=0;fori:=1tox-1doifxmodi=0thenans:=ans+i;exit(ans);end;proceduresolve;vari,j:Iongint;beginfori:=1tosdoforj:=1tosdobeginfi,j:=fi-l,j;if(j-i>=0)and(fi-l,j-i+ai>fi,j)thenfizj:=fi-lzj-i+ai;end;end;=main=三=vari:Iongint;beginassign(input,maxsum.in,);reset(input);assign(output,ma×sum.out,);rewrite(output);readln(s);fori:=1tosdoai:=sum(i);solve;writein(fs,s);close(input);close(output);end.Problem4:flu流感会结束吗问题描述八中一共有11个学生。这n个学生里一共有m对朋友关系。在流感发作期,每个健康学生都要看望当天他生病的朋友(如果有的话),并在第二天被传染上疾病(除非他在免疫期内);每个生病的学生在第二天都会痊愈,并在这一天具有免疫性。从第三天起,看望生病的朋友将再次使他染上流感。初始时(第一天),只有一个学生患有流感。试问多少天后流感会自动结束。输入数据第一行输入两个正整数n和mo接下来m行每行两个正整数x,y,表示编号为X的学生和编号为y的学生是一对朋友。输入数据保证每一对朋友关系只描述一次。最后一行输入一个正整数,代表初始时患有流感的学生的编号。输出数据如果流感永远不会结束,请输出-1,否则输出多少天后流感会结束。答案保证不超过2OOO000OOO0样例输入441 22 33 4241样例输出3样例说明第一天1号学生生病,2号学生访问他;第二天2号学生生病,其它三个学生访问他,由于1号处于免疫期,未患流感;第三天3、4号学生生病,2号学生访问他们。第四天3、4号学生痊愈,流感结束。时间限制各测试点1秒内存限制你的程序将被分配32MB的运行空间数据范围njm<=100OOOo考察内容图的宽度优先遍历programflu;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