2012年第三届蓝桥杯C/C++程序设计本科B组省赛_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的数目。


参考答案:

0

94371840

参考代码:

#include 

int main(void)
{
	int i;
	int x =10, y=89;
	
	for( i=1; i<=120; i++){
		if ( i%2 == 1){
			y = y-x;
		}
		if ( i%4 == 0){
			y *= 2;
		}
		if ( i%6 == 0){
			x *= 2;
		}
	}
	
	printf("%d", y);
	
	return 0; 
}

题解思路:

看到这个问题第一眼,首先相当到的是PTA中兔子繁衍问题(也不知道最先的出处在哪)

兔子繁衍问题题目描述如下:

一对兔子,从出生后第3个月起每个月都生一对兔子。小兔子长到第3个月后每个月又生一对兔子。假如兔子都不死,请问第1个月出生的一对兔子,至少需要繁衍到第几个月时兔子总数才可以达到N对?

这类问题看似复杂,实际上选好衡量轴,然后用穷举几个案例就可以了,这两道题的衡量轴都是时间

为此对微生物增殖问题,以时间为衡量轴,当X=10,Y=90的情况分析,得出下列表格


序号 时间变化 微生物X的数量 微生物Y的数量 变化分析
0 第0分钟 10 90
1 第0.5分钟 10 80 X吃掉Y,即90-10=80
2 第1.0分钟
10 80
3 第1.5分钟
10 70 X吃掉Y,即80-10=70
4 第2.0分钟
10 140 Y繁殖
5 第2.5分钟
10 130 X吃掉Y,即140-10=130
6 第3.0分钟
20 130 X繁殖
7 第3.5分钟
20 110 X吃掉Y,即130-20=110
8 第4.0分钟
20 220 Y繁殖
9 第4.5分钟
20 200 X吃掉Y,即220-20=200
10 第5.0分钟
20
200  
为此我们可以得出,当序号为奇数的时候,X吃掉Y,当序号为4的倍数和6的倍数时,X和Y分别进行繁殖,因为以半分钟为一个刻度,60分钟就需要循环120次。

你可能感兴趣的:(C语言学习,菜鸟笔记,蓝桥杯)