题意:
有一种细胞,从诞生·第二天开始就能每天中午分裂出一个新的细胞,新的细胞在第二天又开始繁衍。每个细胞分裂两个细胞后将会死亡。假设在第一天,有一个这样的细胞,请问,在第 N 天晚上,细胞的数量是多少?输入一个整数 N(0 < N < 20),请编程求解第 N 天该细胞的数量。
思路:
step1:细胞分裂;
step2:细胞死亡;
编码:
(1).新建一个cell类,属性divisionCount记录分裂次数,以便判断是否死亡。
public class Cell {
public int divisionCount = 0;
}
(2).新建一个StartDivision,cells存放细胞总数,initNumber控制初始化(也可用static块控制)。
public class StartDivision {
public static List<Cell> cells =new ArrayList<Cell>();
public static int initNumber = 0;
//根据分裂次数获取细胞总数
public int getCellsNumber(int divisionCount){
//初始1个,即divisionCount=0;
//return new Cell().divide(divisionCount);
return new StartDivision().divide(divisionCount);
}
public int divide(int divisionCount){
if(initNumber==0){
cells.add(new Cell());
initNumber++;
if(divisionCount==0)
return cells.size();
}
initNumber++;
List<Cell> temporaryCells =new ArrayList<Cell>();
for(Cell cell:cells){
temporaryCells.add(cell);
}
for(int i=0;i<temporaryCells.size();i++){
//遍历所有的存在的细胞池
Cell momCell = cells.get(i);
if(momCell.divisionCount<2){
//如果分裂次数少于两次,则可以分裂
Cell sonCell = new Cell();
cells.add(sonCell);
cells.get(i).divisionCount++;
//分裂完遍历删除次数超过两次的-----即细胞死亡
if((i+1)==temporaryCells.size()){
List<Cell> temporaryCells2 =new ArrayList<Cell>();
for(Cell cell:cells){
temporaryCells2.add(cell);
}
//for(int j=0;j<temporaryCells2.size();j++){
/* for(int j=temporaryCells2.size()-1;j>=0;j--){
//list安全删除 方法1 :倒序删除
//去除死亡的细胞
Cell possibleDiedCell = temporaryCells2.get(j);
if(possibleDiedCell.divisionCount>=2){
cells.remove(j);
}
}*/
Iterator<Cell> cellsIterator = cells.iterator();
while(cellsIterator.hasNext()){
//list安全删除 方法2 :迭代器删除
Cell possibleDiedCell = cellsIterator.next();
if(possibleDiedCell.divisionCount>=2){
cellsIterator.remove();
}
}
}
}
}
return cells.size();
}
}
(3).新建一个divisionDemo类,记录10次对应的细胞总数。
public class divisionDemo {
/**
* @param args
*/
public static void main(String[] args) {
for (int i = 0; i < 10; i++) {
System.out.println("cell with time -----------");
int count = new StartDivision().getCellsNumber(i);
System.out.println("cell with time i=" + i + " count=" + count);
}
}
}
(4).输出:
cell with time -----------
cell with time i=0 count=1
cell with time -----------
cell with time i=1 count=2
cell with time -----------
cell with time i=2 count=3
cell with time -----------
cell with time i=3 count=5
cell with time -----------
cell with time i=4 count=8
cell with time -----------
cell with time i=5 count=13
cell with time -----------
cell with time i=6 count=21
cell with time -----------
cell with time i=7 count=34
cell with time -----------
cell with time i=8 count=55
cell with time -----------
cell with time i=9 count=89
(5).萌新第一次写博客,大佬别喷。