/*假设有两种微生物 X 和 Y
X出生后每隔3分钟分裂一次(数目加倍),Y出生后每隔2分钟分裂一次(数目加倍)。
一个新出生的X,半分钟之后吃掉1个Y,并且,从此开始,每隔1分钟吃1个Y。
现在已知有新出生的 X=10, Y=89,求60分钟后Y的数目。
如果X=10,Y=90 呢?
X出生后每隔3分钟分裂一次(数目加倍),Y出生后每隔2分钟分裂一次(数目加倍)。
一个新出生的X,半分钟之后吃掉1个Y,并且,从此开始,每隔1分钟吃1个Y。
现在已知有新出生的 X=10, Y=89,求60分钟后Y的数目。
如果X=10,Y=90 呢?
本题的要求就是写出这两种初始条件下,60分钟后Y的数目。*/
--------------------------------------------------------------code1-------------------------------------------------------------------------------------------
public class AL21 {
/**
* @param args
*/
public static void main(String[] args) {
float res=add(10,89,60)>0?add(10,89,60):0;
System.out.println(res);
System.out.println(add(10,90,60)>0?add(10,90,60):0);
}
public static long add(long x,long y ,int m)
{
int n=1;
while(n<=m)
{
y=y-x;
if(n%2==0) y=y*2;
if(n%3==0) x=x*2;
n++;
}
return y;
}
}
--------------------------------------------------------code2------------------------------------------------------------------------
//idea: 把1分钟拆成两个半分钟,那么60分钟就是120个半分钟
publicclass AL22{
publicstaticvoidcalculate(intprimaryNumX,intprimaryNumY,inttimesOfMinute) {
intnumX=primaryNumX,numY=primaryNumY;
for (int i = 2; i<=timesOfMinute*2; i++) {
if(numY<=0){
numY=0;
break;
}
if(i%2==0){
numY-=primaryNumX;// 当为整数分钟时,最初数目的生物X将进食同等数目的生物Y
}
elseif(i%2==1){
numY-=(numX-primaryNumX);//当为半数分钟的奇数倍时,由最初的生物X增值产生的生物X将进食同等数目的生物Y
}
if(i%6==0){
numX*=2; //三分钟的整数倍,生物X增值一倍
}
if(i%4==0){
numY*=2;//两分钟的整数倍,生物Y增值一倍
}
}
System.out.println(numY);
}
publicstaticvoidmain(String[] args) {
calculate(10,89, 60);
calculate(10,90, 60);
}
}