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