2012 藍橋杯【初賽試題】微生物增殖
題目描述:假設有兩種微生物 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為例)
時間 | x | y | 原因 |
0.0 | 10 | 90 | |
0.5 | 10 | 90 | |
1.0 | 10 | 80 | 90-10 |
1.5 | 10 | 80 | |
2.0 | 10 | 140 | (80-10)*2 |
2.5 | 10 | 140 | |
3.0 | 20 | 130 | 140-10 |
3.5 | 20 | 120 | 130-10 |
4.0 | 20 | 220 | (120-10)*2 |
4.5 | 20 | 210 | 220-10 |
5.0 | 20 | 200 | 210-10 |
5.5 | 20 | 190 | 190-10 |
6.0 | 40 | 360 | (190-10)*2 |
6.5 | 40 | 340 | 360-20 |
7.0 | 40 | 320 | 340-20 |
7.5 | 40 | 300 | 320-20 |
8.0 | 40 | 560 | (300-20)*2 |
8.5 | 40 | 540 | 560-20 |
9.0 | 80 | 520 | 540-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; }
最後更新:2017-04-03 12:55:12