看到了yiding_he 写的《母牛问题(非算法解答) 》感觉手痒痒,也写了一下,使用了一下组合模式,简单测试了一下。
java 代码
- /**
- *
- */
- package cow;
- import java.util.ArrayList;
- import java.util.List;
- /**
- * 牛产仔问题。有一头母牛,它每年年初要生一头小母牛;每头小母牛从第四个年头起,
- * 每年年初也要生一头小母牛。按此规律,若无牛死亡,第20年头上共有多少头母牛?
- */
- public class CowImp {
- private List chirdenCow = new ArrayList();;
- public int allCows() {
- int count = 1;
- for (int i =0; i < chirdenCow.size(); i++) {
- count = count + ((CowImp)chirdenCow.get(i)).allCows();
- }
- return count;
- }
- public CowImp(int age) {
- if (age >= 3) {
- for (int i =3; i < age; i++) {
- chirdenCow.add(new CowImp(age - i));
- }
- }
- }
- }
测试代码,比如四年后,有几头牛。我写的代码假设了那头牛正好3岁了,这样如果测试20年后,传入的值就是23就可以,测试代码如下
java 代码
- package cow;
- import junit.framework.TestCase;
- public class CowImpTest extends TestCase {
- public void testAllCows() {
- CowImp cow = new CowImp(23);
- assertEquals(2745, cow.allCows());
- }
- }