题目描述: 假设有两种微生物 X 和 Y X出生后每隔3分钟分裂一次(数目加倍),Y出生后每隔2分钟分裂一次(数目加倍)。 一个新出生的X,半分钟之后吃掉1个Y,并且,从此开始,每隔1分钟吃1个Y。 现在已知有新出生的 X=10, Y=89,求60分钟后Y的数目。 如果X=10,Y=90 呢?
本题的要求就是写出这两种初始条件下,60分钟后Y的数目。
思路:一般来说这种题都是找规律的题(在纸上笔算是不可能算出结果的),本体也不例外,只要找到x与y关于时间的对应关系即可。
先看一下前9分钟的情况(以10和90为例)
时间xy原因
0.0 10 90
0.51090
1.0108090-10
1.51080
2.010140(80-10)*2
2.510140
3.020130140-10
3.520120130-10
4.020220(120-10)*2
4.520210220-10
5.020200210-10
5.520190190-10
6.040360(190-10)*2
6.540340360-20
7.040320340-20
7.540300320-20
8.040560(300-20)*2
8.540540560-20
9.080520540-20
总结起来就是
(本表格参考其他博客)备注:第0.5秒时,由于原来给的10个x不是新生,所以这0.5秒x不会吃y
可以看出,每隔3秒,x加倍一次
当秒数是奇数时,对于y,y=y-x;
当秒数是偶数时,对于y,y=(y-x)*2;
要注意的是,,必须分清x,y增值以及x吃y的先后顺序:
首先要进行x吃y的判定,之后才能进行增值,如果先进行增值的话,就会发生错误!
当x=10,y=90时,最后y的结果是:94371840
计算代码:
#include<stdio.h>#include<stdlib.h>int main(){int n,m;double x,y;scanf("%d%lf%lf",&n,&x,&y);m=1;while(m<=n){if(m%2!=0)y=y-x;if(m%2==0)y=(y-x)*2;if(m%3==0)x*=2;//printf("m=%d x=%.0lf y=%.0lf\n",m,x,y);m++;}printf("x=%.0lf y=%.0lf\n",x,y);system("pause");return 0;}
趁着有脾气装潇洒,有本钱耍个性,