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   tuzhuo  阅读(162)  评论(0编辑  收藏  举报

编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示