/**
*需求:一个农夫养了一头牛,三年后,这头牛每一年会生出1头牛,生出来的牛三年后,
*又可以每年生出一头牛……问农夫10年后有多少头牛?n年呢?(不考虑其他因素,只考虑此数学问题)
*
* 思路:由题可知分析,第一年,1 一头牛产子第二年1 一头牛产子 第3年为2,两头牛头牛产子
* 由此可知牛的数量是由两个方面决定牛的年龄,牛的原有数量,年数
* 所以可以用一个Map集合,键为牛的名字,值为牛的年龄,遍历判断牛的年龄,判断产子,判读总数
*
* 步骤:1,建立map集合,新建一个函数用于添加牛的属性,判断产子与否,产子往map集合中添加
*
* */
public class Answer {
public static void main(String[] args) {
// TODO Auto-generated method stub
// 定义一集合用于装载所有牛
Map<String,Integer> cowGate = new TreeMap();
// 放入一条种牛
cowGate.put("cow1", 1);
int totalYear = 6;
// 在一定年数后得到的牛的数量
getCowsNumber(totalYear,cowGate);
// 判断牛的数量
if(cowGate.size()<1){
System.out.println("no cow ,how to get cow,my gold?");
return;
}
// 打印输出
System.out.println(cowGate.size());
Set<Map.Entry<String, Integer>> cowSet = cowGate.entrySet();
Iterator<Entry<String, Integer>> it = cowSet.iterator();
while(it.hasNext()){
Entry<String, Integer> entry = it.next();
System.out.println(entry.getKey()+" : "+entry.getValue());
}
}
/**
* descriptor:得到一年后牛的数量
*
* @param
* totalYear years later to get the cows number
* cowGate a cow gate to capacity all cow
*
*
* */
private static void getCowsNumber(int totalYear,
Map<String, Integer> cowGate) {
// TODO Auto-generated method stub
// 判断牛的数量
if(cowGate.size()<1){
System.out.println("no cow ,how to get cow,my gold?");
return;
}
int i = 1;
while(i<=totalYear){
i++;
// 一年后牛的数量
cowOfYear(cowGate);
}
}
/**
* descriptor:得到一年后牛的数量
*
* @param
* cowGate a cow gate to capacity all cow
*
*
* */
private static void cowOfYear(Map<String, Integer> cowGate) {
// TODO Auto-generated method stub
// 用一个新的牛栏装原来的牛,不然迭代就会报异常
Map<String,Integer> newCowGate = new TreeMap(cowGate);
Set<Map.Entry<String, Integer>> newCowSet = newCowGate.entrySet();
Iterator<Entry<String, Integer>> itNewCowSet = newCowSet.iterator();
while(itNewCowSet.hasNext()){
while(itNewCowSet.hasNext()){
Entry<String, Integer> entryNewCowSet = itNewCowSet.next();
// 判断牛的年龄是否超过3岁,超过牛栏加一条新生牛
if(entryNewCowSet.getValue()>=3){
int newCowNum = cowGate.size()+1;
cowGate.put("cow"+newCowNum, 1);
}
// 牛的年龄加一岁
cowGate.replace(entryNewCowSet.getKey(), entryNewCowSet.getValue()+1);
}
}
}
} |