蓝桥杯 微生物增殖

  • 内容
  • 相关

问题描述:

假设有两种微生物 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”中,不要写在这里!

两个整数,每个 1 行。

分析:

    X 的数量会不断的呈指数增加,而 Y 的数量受 X 的限制;还有不论是 X 半分钟吃掉一个,还是一分钟都可以看成 X 每一分钟吃掉一个Y 。当时间是 3 的倍数时,X 的数量成倍增加,时间是 2 的倍数时,的数量成倍增加

源代码:

#include <iostream>
using namespace std;
typedef long long ll;
void f(ll x,ll y); 
int main()
{
	f(10,89); 
	f(10,90);
	return 0;
}
void f(ll x,ll y)
{
	for(int time=1; time<=60; time++){	//1分钟为一个单位 
		y-=x;
		if(y <= 0)		break;	//如果y为负数,结果都是0,没有再判断的必要了
		if(time%3 == 0)	x*=2;
		if(time%2 == 0)	y*=2;
	}
	cout << y << endl;
}


    也可以以半分钟为一个单位的来判断,源代码:

void f(ll x,ll y)
{
	for(int time=1; time<=120; time++){	//半分钟为一个单位 
		if(time%2 == 1)	y-=x;	//每到半分钟的时候吃掉一个1 3 5 7 9 ... 
		if(y <= 0){
			break;	//如果y为负数,结果都是0,没有再判断的必要了
		}
		if(time%6 == 0)	x*=2;
		if(time%4 == 0)	y*=2;
	}
	cout << y << endl;
}


输出结果:

-73728

94371840

    第一个负数,说明 Y 已被 X 吃绝种了,所以呢 60 分钟后 Y 数量为 0

正确结果:

0

94371840


本文标签:

版权声明:若无特殊注明,本文皆为《尤尤》原创,转载请保留文章出处。

本文链接:蓝桥杯 微生物增殖 - https://www.yxfseo.cn/post-215.html

发表评论

电子邮件地址不会被公开。 必填项已用*标注

00:00 / 00:00
顺序播放