1、ACM试题及其答案1猪的安家Andy和Mary养了很多猪。他们想要给猪安家。但是Andy没有足够的猪圈,很多猪只能够在一个猪圈安家。举个例子,假如有16头猪,Andy建了3个猪圈,为了保证公平,剩下1头猪就没有地方安家了。Mary生气了,骂Andy没有脑子,并让他重新建立猪圈。这回Andy建造了5个猪圈,但是仍然有1头猪没有地方去,然后Andy又建造了7个猪圈,但是还有2头没有地方去。Andy都快疯了。你对这个事情感兴趣起来,你想通过Andy建造猪圈的过程,知道Andy家至少养了多少头猪。输入输入包含多组测试数据。每组数据第一行包含一个整数n (n = 10) Andy建立猪圈的次数,解下来n
2、行,每行两个整数ai, bi( bi = ai = 1000), 表示Andy建立了ai个猪圈,有bi头猪没有去处。你可以假定(ai, aj) = 1.输出输出包含一个正整数,即为Andy家至少养猪的数目。样例输入33 15 17 2样例输出16答案:/猪的安家.cpp:Definestheentrypointfortheconsoleapplication./#includestdafx.h#includeiostream.hvoidmain()intn;ints102;boolr10;charch;cout请输入次数:n;for(inti=0;in;i+)cout请输入第i+1次的猪圈个数
3、和剩下的猪:(用-分开)si0chchsi1;for(i=0;i10;i+)ri=true;for(intsum=1;sum+)for(i=0;in;i+)ri=(sum%si0=si1);for(i=0;in;i+)if(ri=0)break;if(i=n)break;cout猪至少有sum只。endl;蛇行矩阵Problem蛇形矩阵是由1开始的自然数依次排列成的一个矩阵上三角形。Input本题有多组数据,每组数据由一个正整数N组成。(N不大于100)Output对于每一组数据,输出一个N行的蛇形矩阵。两组输出之间不要额外的空行。矩阵三角中同一行的数字用一个空格分开。行尾不要多余的空格。Sa
4、mple Input5Sample Output1 3 6 10 152 5 9 144 8 137 1211答案:/SNAKE矩阵/#defineM100intmain()intaMM;intn;printf(请输入N的值:n);scanf(%d,&n);if(n=0)return0;printf(形成的蛇形矩阵为:n);a00=1;/因为每次第一个数必是1printf(%d,a00);for(inti=0;in-1;i+)ai+10=ai0+i+1;/提前算出下一行的第一个数据for(intj=0;jn-i-1;j+)aij+1=aij+j+i+2;/算出每一行的每个数据printf(%d
5、,aij+1);/打印每一行的数据printf(n%d,ai+10);/打印下一行的第一个数据printf(n);return0;平方数给出包含M个数字的列表,和列表中所有数字的所有质因数。求出最长的子列表,使得子列表中所有数字的乘积是一个完全平方数。输入输入文件包含多组测试数据。第一行包含两个整数N , M ( 1 = N = 30 , 1 = M = 30000 ). N 是质因数的个数。接下来一行有N个整数,给出所有的质因数。然后一行包含M个整数,给出列表。输入文件结束于N = M = 0.输出对于每组数据,输出最长子列表的两个位置坐标l r。l是该子列表在列表中的起始位置,r是结束位置
6、。如果多种情况都满足子列表长度最大,输出l最小的一个。如果不存在这样的子列表输出“None”。样例输入3 42 3 54 9 25 63 42 3 56 6 3 30 0样例输出1 31 4答案:#includeusingnamespacestd;#defineMAX_N30#defineMAX_M30000voidsquareNumber(int*A,int*B,intN,intM);voidmain()intAMAX_N;intBMAX_M;intN,M;cinNM;inti;while(N!=0|M!=0)for(i=0;iAi;for(i=0;iBi;squareNumber(A,B,
7、N,M);cinNM;voidsquareNumber(int*A,int*B,intN,intM)inti,j,k,t;boolflag;intnumMAX_N=0;inttemp=1;intlen_max=0;intr=0;intf=0;for(i=0;iM;i+)for(j=i+1+len_max;j=M;j+)for(k=0;kN;k+)numk=0;for(k=i;kj;k+)temp=Bk;while(temp!=1)flag=false;for(t=0;tN;t+)if(temp%At=0)temp/=At;numt+;flag=true;if(!flag)coutÊ
8、ý¾ÝÓÐÎendl;return;flag=true;for(k=0;kN;k+)if(numk%2=1)flag=false;break;if(flag)len_max=j-i;f=i+1;r=j;coutfrendl;死亡迷宫背景很久以前,迷宫里住着一个恶魔。一天,我们伟大的英雄Andy无意中踏入了这个迷宫。不幸的是,他被困在这个迷宫当中了。恶魔在迷宫中召唤出了许多怪物,想要阻止Andy逃脱。在迷宫中,Andy遇到一个一位巫师。他给了Andy迷宫的地图,并告诉他迷宫的入口很快会关闭。Andy必须以非常快的速度到达
9、入口,并且有足够的力气推开挡在入口的岩石。于是,Andy带着地图一路向着出口走去问题给出Andy和各怪物的能量, 攻击力, 防御力,和迷宫的地图,请你计算一下 能量/耗时 的最大值。当Andy走到有怪物的地方时,Andy会先进行攻击,然后怪物攻击,然后Andy当一方的能量小于等于0时攻击停止,并且小于等于0的一方死亡。攻击时,每次对方损耗的能量为己方的攻击力减去对方的防御力。当Andy走到标有A,B,C的地方时,Andy的相应属性会得到增加。对应关系如下:A 能量 + PB 攻击力 + QC 防御力 + R如果耗时超过100,那么门将永远也打不开了,我们的Andy也就永远的困在了这个暗无天日的
10、迷宫之中输入标准输入包含多组数据。每组数据的第一行有六个整数W (1 = W = 20), H (1 = H = 20), P (1 = P = 10), Q (1= Q = 10), R (1 = R = 10), M (0 = M = 5). 迷宫是由一个W*H的矩形区域构成。M表示怪物的数量。Andy每个单位时间可以移动到相邻的4个格中,当然,必须得保证目标格在矩形区域中。默认的起始时间是0。与怪物战斗不会花费额外的时间。其后H行每行严格包含W个字符。用如下的各字符表示这个迷宫的地图:#表示一堵墙(Andy是不会穿墙术的). Marks an empty space, into whic
11、h you can move.表示一块空地。S表示Andy的初始位置。E表示迷宫的入口。0表示各怪物。A表示属性增加地点。(使用次数仅限于一次)其后一行有三个整数,表示Andy的能量,攻击力,和防御力。其后M行,每行有四个整数,表示怪物的编号,和这个怪物的各属性。输出对于每组输入数据,输出 能量/耗时 的最大值,并保留4位小数。如果Andy不能到达出口,输出“impossible”。数据之间无空行。样例输入6 17 7 5 4 3#E.#.#A#.#.0.#.#B#1#2#.S.C#100 59 100 23 48 01 65 41 02 20 27 0样例输出3.7037 答案:#inclu
12、de#include#includeusingnamespacestd;#defineMAX_MAP_SIZE20#defineMAX_MON_SIZE5#defineTime100intW,H,P,Q,R,M;charmapMAX_MAP_SIZEMAX_MAP_SIZE;typedefstructAndyintp;intq;intr;*pAndy;typedefstructMonsterintid;intp;intq;intr;*pMonster;typedefstructNodeintx;inty;*pNode;Andyandy;MonstermonsMAX_MON_SIZE;chark
13、eywords4+MAX_MON_SIZE;intshortestPath(pNodepath,intlen_path,chardes,char*revs,intlen_rev,inttime);floatescape(char*revs,intlen_revs,inttime,Andyandy);boolgetPosition(charch,pNodep);voidmain()ifstreamin(data.in);inWHPQRM;inti;for(i=0;imapi;/coutmapiandy.pandy.qandy.r;for(i=0;imonsi.id;inmonsi.p;inmon
14、si.q;inmonsi.r;in.close();keywords0=E;keywords1=A;keywords2=B;keywords3=C;for(i=0;iM;i+)keywords4+i=0+i;/*NodepathMAX_MAP_SIZE*MAX_MAP_SIZE;path0.x=4;path0.y=2;intlen_path=1;chardes=E;charrevs10=.012ABCS;intlen_rev=8;inttime=100;coutshortestPath(path,len_path,des,revs,len_rev,time)endl;*/charrevs10=
15、.S;intlen_revs=2;inttime=100;coutescape(revs,len_revs,time,andy)endl;/*charrevs10=.S20E;intlen_revs=5;NodepathMAX_MAP_SIZE*MAX_MAP_SIZE;intlen_path=1;inttime=100;for(intj=1;j4;j+)getPosition(revsj,path);coutshortestPath(path,len_path,revsj+1,revs,j+1,time)xp-y=des)/ÕÒµ½&Au
16、ml;¿returnlen_path-1;if(time1)/ûÓÐʼä¼ÌÐøÑÕÒreturn-1;inti,j,k;for(i=0;ixp-y=revsi)Nodenodes4=p-x,p-y-1,p-x,p-y+1,p-x-1,p-y,p-x+1,p-y;intmin=W*H;inttemp;intbid=-1;boolflag;for(j=0;j4;j+)flag=true;for(k=0;k
17、0&tempmin)min=temp;bid=i;returnbid=-1?-1:min;return-1;boolgetPosition(charch,pNodep)for(inti=0;iW;i+)for(intj=0;jx=i;p-y=j;returntrue;returnfalse;floatescape(char*revs,intlen_revs,inttime,Andyandy)inti,j;inttempTime;floatmax=-1;floattemp;NodepathMAX_MAP_SIZE*MAX_MAP_SIZE;intlen_path=1;AndynewAndy;boolflag;for(i=0;i4+M;i+)flag=false;for(j=1;j0)if(keywordsi=E)/ÕÒµ½³ö¿Útemp=(float)andy.p/(Time-time+tempTime);/*couttempandy.ptime;for(intm=0;mlen_revs;m+)
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1