1.细胞分裂
题目描述
有一个细胞,它每秒分裂一次。每个新分裂的细胞从第四秒开始,每秒也会分裂一个细胞。请编程实现在第n秒的时候,共有多少细胞?
输入
输入数据由多个测试实例组成,每个测试实例占一行,包括一个整数n(0<n<55),n的含义如题目中描述。
n=0表示输入数据的结束,不做处理。
输出
对于每个测试实例,输出在第n秒的时候细胞的数量。
每个输出占一行。
样例输入
2
4
5
0
样例输出
2
4
6
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
while(true) {
int n = sc.nextInt();
if (n == 0)break;
count(n);
}
}
private static void count(int n) {
int[] arr = new int[55];
// TODO Auto-generated method stub
for (int i = 1; i<=n; i++) {
if (i<4) {
arr[i] = i;
}else {
arr[i] = arr[i-1]+arr[i-3];
//+arr[i-1]:上一秒的数量
//+arr[i-3]:4秒前的数量
}
}
System.out.println(arr[n]);
}
}
2.微生物增殖
题目描述
假设有两种微生物 X 和 Y
X出生后每隔3分钟分裂一次(数目加倍),Y出生后每隔2分钟分裂一次(数目加倍)。
一个新出生的X,半分钟之后吃掉1个Y,并且,从此开始,每隔1分钟吃1个Y。
现在会给定一个n(n<=60并且n为整数)让你计算n分钟之后y的数量。
输入
第一行输入n,x,y
输出
输出n分钟之后y的数量 若y<=0时输出y=0
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int x = sc.nextInt();
int y = sc.nextInt();
//这儿注意:不是for ( int i = 0; i<n; i++),因为后面还要求对2,3的余数
for ( int i = 1; i<= n; i++) {
//开始时刻,x和y都是新出生的
//不管X是半分钟吃掉一个Y还是1分钟吃掉一个Y,都可以看成1分钟吃掉一个Y
//这样算,一个新出生的X,0.5分钟吃掉一个Y,1.5分时吃一个,2.5分时吃一个
//其实也就是三分钟之内吃掉一个Y
y -= x;
//X和Y要动态更新
//这题就是每分钟X吃掉一个Y,每两分钟X翻倍,每三分钟Y翻倍
if ( i% 3 == 0) {
x *= 2;
}
if(i % 2 == 0) {
y *= 2;
}
}
if(y<=0) {
System.out.println(0);
}else {
System.out.println(y);
}
}
}