资源描述:
《2012第三届蓝桥杯软件大赛初赛cc++语言本科组答案》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第一题:假设有两种微生物X和YX出生后每隔3分钟分裂一次(数目加倍),Y出生后每隔2分钟分裂一次(数目加倍)。一个新出生的X,半分钟之后吃掉1个Y,并且,从此开始,每隔1分钟吃1个Y。现在已知有新出生的X=10,Y=89,求60分钟后Y的数目。如果X=10,Y=90呢?本题的要求就是写出这两种初始条件下,60分钟后Y的数目。题目的结果令你震惊吗?这不是简单的数字游戏!真实的生物圈有着同样脆弱的性质!也许因为你消灭的那只Y就是最终导致Y种群灭绝的最后一根稻草!首先从题目描述上可以猜测第一种情况的答案
2、很可能是0。虽然只需要写答案,还是需要写代码来计算一下。华哥他们说时间要半分钟半分钟递加,想了一下其实1分钟是可以的,把半分钟部分的代码写在前面而已。我的代码:viewsource01#include02usingnamespacestd;03 04intmain()05{06 intx=10,y=90;07 inttime=60,k;08 for(k=1;k<=time;k++)09 {10 y-=x;11 if(k%2==
3、0)y*=2;12 if(k%3==0)x*=2;13// printf("%dtime:tx=%dty=%d",k,x,y);14 }15 printf("y=%d",y);16}最后算出的结果,第一种情况是个巨大的负数: -979369984,其实就是等于0喽。第二种情况是94371840,果然一个小数字会引起巨大的差别啊。 第二题:ABCDE*?=EDCBA“ABCDE代表不同的数字,问号也代表某个数字!”对于题意理解上出现了一些问题,ABCDE
4、代表不同的数字,那能不能是0呢?A作为首位能不能是0呢?我写的时候认为是可以的。华哥他们认为是不可以的。因为只有5层循环,所以直接for过去了。我的代码:viewsource01#include02usingnamespacestd;03 04intmain()05{06 inta,b,c,d,e;07 for(a=0;a<10;a++)08 {09 for(b=0;b<10;b++)10 {11 if(b==
5、a)continue;12 for(c=0;c<10;c++)13 {14 if(c==b
6、
7、c==a)continue;15 for(d=0;d<10;d++)16 {17 if(d==c
8、
9、d==b
10、
11、d==a)continue;18 for(e=0;e<10;e++)19
12、 {20 if(e==d
13、
14、e==c
15、
16、e==b
17、
18、e==a)continue;21 if((a+b*10+c*100+d*1000+e*10000)%(a*10000+b*1000+c*100+d*10+e)==0)22 {23 printf("%d%d%d%d%d",a,b,c
19、,d,e);24 }25 }26 }27 }28 }29 }30}这样得出的结果有三个:02178、04356、21978,前两个都是带前导0的,我都写了上去,也不知道到底应该是怎样,蛋痛啊。 第三题:有一群海盗(不多于20人),在船上比拼酒量。过程如下:打开一瓶酒,所有在场的人平分喝下,有几个人倒下了。再打开一瓶酒平分,又有倒下的,再次重复…
20、…直到开了第4瓶酒,坐着的已经所剩无几,海盗船长也在其中。当第4瓶酒平分喝下后,大家都倒下了。等船长醒来,发现海盗船搁浅了。他在航海日志中写到:“……昨天,我正好喝了一瓶…….奉劝大家,开船不喝酒,喝酒别开船……”请你根据这些信息,推断开始有多少人,每一轮喝下来还剩多少人。如果有多个可能的答案,请列出所有答案,每个答案占一行。格式是:人数,人数,…例如,有一种可能是:20,5,4,2,0这个就很简单了,四个递减的正整数a,b,c,d。1/a+1/b+1/c+1/d=1即可。考虑到循