本文主要是介绍第三届蓝桥杯【省赛试题1】微生物增殖,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目描述:
假设有两种微生物 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”中,不要写在这里!
题目答案:94371840
题目思路:当看了题目以后,思路很混乱,X3分钟分裂一次,Y2分钟分裂一次,新生的一个X半分钟吃掉一个Y,之后一分钟吃掉一个Y。
半分钟和一分钟比较让人烦恼,如果一直都是一分钟或者半分钟吃掉一个Y 那么你一定会飞快的敲出程序。当做题遇到不知道从何下手的时候,去找一些不变的量,或者变化但是容易控制,掌握甚至说是理解的量,如果凭空想象X生物数量翻倍,Y生物数量翻倍.....一定会想到脑袋爆炸。比较容易能解决问题的方法是,我们以时间为轴,根据时间的变化,来观察生物数量的变化。
从上表中可以看出,在2的倍数时间Y数目翻倍,3的倍数时间X数目翻倍,而Y数目减少的数目都是在某点5分钟时候减少X个。得出核心代码:
if(i%2==1) y-=x;
if(i%4==0) y*=2;
if(i%6==0) x*=2;
题目代码:
#include<cstdio>
using namespace std;
int x=10 ,y=90;
int main(){for(int i=1 ;i<=120 ;i++){if(y<=0){y=0;break;}if(i%2==1) y-=x;if(i%4==0) y*=2;if(i%6==0) x*=2;}printf("%d\n",y);}
这篇关于第三届蓝桥杯【省赛试题1】微生物增殖的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!