《ACM软件大赛之编程大赛题目附部分答案.docx》由会员分享,可在线阅读,更多相关《ACM软件大赛之编程大赛题目附部分答案.docx(13页珍藏版)》请在第一文库网上搜索。
1、ACM软件大赛之编程大赛比赛注意事项: 比赛时间为3小时(180分钟);比赛分两个阶段:第一阶段限时30分钟,完成公示的3题,第二阶段限时150分钟(事先完成第一阶段题目的小组可提前进入第二阶段); 比赛第一阶段的3道题目将在前期宣传中告知参赛选手,比赛第二阶段的题目将由赛事主席当场公布竞赛题目; 前两阶段题目分为三个分值(5分、10分、15分),第一阶段3道公示题都为5分;第二阶段总共15道题,根据不同的难度分值不同,分别为5道5分题,5道10分题,5道15分题;笫一阶段参赛队员不可参考任何相关资料:第二阶段参赛队员可以携带诸如书,手册,程序清单等参考资料。比赛过程中队员不得携带任何电子媒质
2、的资料;参赛者可以选择自己擅长的语言(C,C+,JAVA等等)进行编写 考虑到大一和大二学生的知识掌握程度,大一参加选手一开始就会有10分的分数,最后总分是由所做题目及初始的10分相加得到。 每组队员根据安排使用电脑,小组人数为两人的使用一台电脑,超过两人的使用两台电脑,每台的电脑配置完全相同; 各小组每做完一题或几题,必须交予评委老师运行,评委老师当场给分: 如在比赛中发现作弊等行为,将取消比赛资格。第一阶段公示题目:题目一:(5分)打印以下图形,纵遵从字母顺序,行字符数遵从斐波那契数列ABCCDDDEEEEEFFFFFFFFGGGGGGGGGGGGG#inc1udeintf(intx)in
3、ta=1,b=0;intmax_=x;intsum=O;for(inti=0;imax_;i+)sum=a+b;a=b;b=sum;)returnsum;void1oop_print(intnumzcharchr)for(inti=0;inum;i+)std:coutchr;std:coutn;)intmain()int1ine_max=7;charchr=A;for(int1ine=0;1ine1ine_max;1ine+)1oop_print(f(1ine+1),chr);chr+;)return0;)题目二:(5分)有个电子钟,12点显示为12:00(即12小时制),那么请问一天24时间
4、内,出现连续3个相同数字的钟点有几个?#inc1udeusingnamespacestd;boo1check(inttime)inth=time100;intm=time-100*h;returnh=12&m0?true:fa1se;/12小时制)intmain()inttime=0;intj(0);总计数器whi1e(time1270)max12:59intt=time;intn4;for(inti=0;i4;i+)ni=t%10;t=10;)if(n1=n2&(n0=n111n3=n1)&check(time)/coutn3n2n1n0ntestj+;)time+;)couttota1:j
5、*2end1;)题目三:(5分)10进制的四位数中有几个符合如下特征:将其分别表示为16进制、10进制、12进制,在每种状态下,分别将各个位上的数相加,能得到3个相等10进制数。例如299210进制:29922+9+9+2=2212进制:18941+8+9+4=2216进制:BBO11+11+0=222992-2999#inc1udeinc1udeusingnamespacestd;intconvert(intn,intc)f1oathigh_p=0;intsum=0;inta4=0,00);for(inti=0;i+)f1oattestN=pow(c,(foat)i);if(n=testN)
6、high-p=i;e1sebreak;)for(inti=O;high_p!=-1;i+)ai=n/pow(c,high_p);n-=ai*pow(c,high-p);high_p-;)for(inti=0;i4;i+)sum+=ai;returnsum;)intmain()intj=0;for(inti=1000;i=9999;i+)if(convert(i,16)=convert(i,1)(convert(i,10)=convert(i42)coutiend1;j+;)coutj;return0;)第二阶段题目:题目一:(5分)不引入临时变量写出SW叩(a,b)功能voidswap(int
7、&a,int&b)a+=b;b=a-b;a-=b;)题目二:(5分)She分别代表3个数字,已知:(he)2=sheshe=?#inc1udeintmain()for(inthe=15;he=96;he+)for(ints=1;s=9;s+)if(he*he=100*s+he)std:couthe*heend1;return0;)题目三:(5分)有4条狗A、B、C、D,他们分别在一条IOom的公路上步行,速率均为5ms,A初始在30m处,B初始在65m处,C初始在75m处,D初始在95m处,初始左右方向是随意的,任意两狗相遇则各自掉头(掉头时间不计,速率保持5ms)请问,4条狗最终都离开公路的
8、最大时间是几秒?inc1udeintmain()std:COUt9监;return0;题目四:(5分)BigBang中的高级石头剪刀布问题Scissors-PaperPaper-RockRock-ScissorsRock-1izard1izard-SpockSpock-ScissorsScissors-1izard1izard-PaperPaper-SpockSpock-Rock规则是左边的手势赢右边的手势,现有玩家P1、P2,输入各自选择的手势,得出胜负。inc1ude#inc1udeusingnamespacestd;intmain()(intp2,p1;COUt1.Paperend12.
9、Rockend13.1izardend1,4.Spockend1,5.Scissorsend1;cinp1p2;f1oatn=p1-p2;if(n*pow(-1zfabs(n)0)此算法由丫202321提供coutp2win;e1seif(n=0)coutduce;e1secoutp1win;returnO;)题目五:(5分)游戏规则:21根火柴,每次取1-4根,谁取走最后一根判输。现在人和计算机博弈,设计一个程序保证计算机必胜,要求每回合人与计算机各输入(或返回)一个代表取走火柴根数的数,直到游戏结束。#inc1udeusingnamespacestd;intmain()intn=21;it
10、p,c;whi1e(n!=O)cinp;whi1e(p4p=On-pO)couterrzinputagainp;)if(n!=O)if(n!=1)cout5-pend1;e1secout=5)n-=5;)题目六:(10分)下列式子:2+3+4=91+2+3+4=10显然右边的数都能表示为n(n2)个连续自然数之和(1开始),暂称之为冏数但似乎23、32等数都不能写成几个数之和的形式,所以它们不是冏数这里有个可行的判断方法为:上限为N,则测试1+2+31+2+3+41+2+3+4.+N2+3+42+3+4+N(N-2)+(N-1)+N是否等于N这是一种可行但非常暴力的穷举实际上冏数还是有一些规律
11、可循的,请设计一个优于之前提到的算法要求输入一个数,并判断它是否为冏数1如果一个数能被奇数(=3)整除,则必能写成X=平均数*中间数的形式,所以是冏数2 .如果一个数是合数,如果其中有奇数因子,则回到1,为冏数;如果它是2的乘方,则不是冏数证明:它无法写成奇数个相加,因为除不尽奇数;也不能写成偶数个相加,中间数有两个,和必为奇数,这个奇数必然是欲判断数的一个因子3 .如果一个数是素数,则必须是6、10、14、18个数相加得来,这样才能得到奇数,根据高斯求和公式,这样的和必有奇数因子综上:只有-2的乘方、素数、小于6的自然数,不是冏数inc1udeusingnamespacestd;boo1ch
12、eck(1ongtar)boo1f1ag=fa1se;if(tar6)f1ag=fa1se;e1seif(tar%2=0)/偶数是否是2的阶乘whi1e(tar%2=0)tar=2;tar=1?f1ag=fa1se:f1ag=true;e1se奇数是否是素数doub1eend=tar;for(inti=3;i=sqrt(end);i+=2)if(tar%i=O)f1ag=true;break;e1secontinue;returnf1ag;intmain()inttar;cintar;boo1f1ag=check(tar);coutf1ag;return0;题目七:(IO分)现有一个固定的正方
13、形区域,可以把它看作是一个数据库中的特别的二维码I11O101001O11O1I1O1100100其中每一位表示黑和白,假设这种二维码容错性只有.5%,即只要有1位以上不符合要求就无法识别。现在输入一个5*5的类似区域(相当于扫描一个二维码),如果在容错范围内,则认为它可识别。如果不是精确匹配,需输出错误位的位置。inc1udeinc1udeusingnamespacestd;intmain()interr=Ozj=0;chara26;charb26=1110101001011011101100100;for(inti=0;iai;if(ai=bi)j=i;err+;)if(err=2)coutfai1;e1seif(err=0)coutmatched;e1seinty=(j+1)+1;intx=j%5+1;cout(,x7y);)return0;)题目八:(IO分)每个人每天早上都要思考一个问题,这个问题的历史已