2012年蓝桥杯省赛A组c++第1题(xy迭代增殖)

/*
微生物增殖

题目:
假设有两种微生物 X 和 Y
X出生后每隔3分钟分裂一次(数目加倍),Y出生后每隔2分钟分裂一次(数目加倍)。
一个新出生的X,半分钟之后吃掉1个Y,并且,从此开始,每隔1分钟吃1个Y。
现在已知有新出生的 X=10, Y=89,求60分钟后Y的数目。
如果X=10,Y=90呢?
本题的要求就是写出这两种初始条件下,60分钟后Y的数目。
题目的结果令你震惊吗?这不是简单的数字游戏!真实的生物圈有着同样脆弱的性质!
也许因为你消灭的那只 Y 就是最终导致 Y 种群灭绝的最后一根稻草!
请忍住悲伤,把答案写在“解答.txt”中,不要写在这里!
*/

#include<cstdio>  
#include<cstring>  
#include<algorithm>  
#include<iostream>  
#include<string>  
#include<vector>  
#include<stack>  
#include<bitset>  
#include<cstdlib>  
#include<cmath>  
#include<set>  
#include<list>  
#include<deque>  
#include<map>  
#include<queue>  
using namespace std;

const int input[2][2]={10,89,10,90};

int main()
{
    for(int i=0;i<2;i++)
    {
        long x=input[i][0],y=input[i][1];
        for(int minute=1;minute<=60;minute++)
        {
            y=y-x;//每个x都要吃一个y 
            if(minute%3==0)
                x*=2;
            if(minute%2==0)
                y*=2;
        }
        if(y<0)    y=0;
        cout<<y<<'\t';
    }
    return 0;
}

 

细心考察题。坑点如下:

1、“半分钟之后吃掉1个Y”是个忽悠你的题设,很多人因此用浮点数来写大循环,这本没有什么错,但是如果你没学过计算机组成原理的IEEE754标准,就用浮点数去写内层if的判定表达式,你就GG了。

2、每个x都要吃一个y,所以是y-x,而不是y-1。

3、如果你内层for循环是这样写的for(int minute=0;minute<60;minute++),逻辑上是正确的,但是两个if:(minute%3==0)、if(minute%2==0)会使你最终结果错误。

4、“if(y<0)    y=0;”虽然不是必须,但是按照现实来说应该是要写的。

 

 

 

tz@COI HZAU

2018/3/21

posted on 2018-03-21 16:56  tuzhuo  阅读(162)  评论(0编辑  收藏  举报