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

时间:2023-03-08 16:56:51
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[][]={,,,}; int main()
{
for(int i=;i<;i++)
{
long x=input[i][],y=input[i][];
for(int minute=;minute<=;minute++)
{
y=y-x;//每个x都要吃一个y
if(minute%==)
x*=;
if(minute%==)
y*=;
}
if(y<) y=;
cout<<y<<'\t';
}
return ;
}

细心考察题。坑点如下:

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