读书人

小弟一到母下蛋的算法目解决思路

发布时间: 2012-03-03 15:33:03 作者: rapoo

小弟一到母下蛋的算法目
一始有一只母,到第四天下一蛋,以後每一天都下一蛋。四天後,第一蛋成了母,四天後,第二只母又下一蛋。同每只的生命期10天。10天後死亡。


N天後,一共有多少只,多少蛋....


小弟考用vector分存放和蛋。比容易,4天生,10天死亡。
只要是蛋怎算?

例子:

1. hen:1 egg:0
2 hen:1 egg:0
3 hen:1 egg:0
4 hen:1 egg:1

5 hen:1 egg:2
6 hen:1 egg:3
7 hen:1 egg:4
8 hen:2 egg:4 (第4天的蛋了,蛋1,但第一只母下蛋)
9 hen:3 egg:4 (第5天的蛋了,蛋1,但第一只母下蛋)
10 hen:3 egg:3 (第一天死了,第6天的蛋了,蛋1)
11 hen:4 egg:3(第7天的蛋了,蛋1。母死了,不再下蛋)
12 hen:5 egg:3 (第8天的蛋了,蛋1。第8天蛋生的母始下蛋)

.....

各位大大能提供一下思路?下弟

[解决办法]
另类斐波那契数列,
f(n) = f(n - 1) + f(n - 8) - f(n - 10) 鸡的数量
lz自己推算一下蛋的数量吧,也是这个思路
[解决办法]

探讨
引用:
另类斐波那契数列,
f(n) = f(n - 1) + f(n - 8) - f(n - 10) 鸡的数量
lz自己推算一下蛋的数量吧,也是这个思路

litaoye兄
我怎么认为这里多减了一部分呢
最后减掉的应该是10天前出生的鸡,是不是应该是
f(n) = f(n-1) + f(n-8) - f(n-10) + f(n-18)?

[解决办法]
C# code
        Result getResult(int day)        {            List<chiken> chikens = new List<chiken>() { chiken.get(10,1) };            List<Egg> eggs = new List<Egg>();            for (int i = 1; i <= day; i++)            {                List<chiken> tmpChiken=new List<chiken> ();                foreach (chiken c in chikens)                {                    if (c.currentLife >= 4)                        eggs.Add(Egg.get(4, 1));                    else if (c.currentLife  > c.Life)                        tmpChiken.Add(c);                    else                        c.currentLife++;                }                remove<chiken>(chikens, tmpChiken);                List<Egg> tmpEgg = new List<Egg>();                foreach (Egg c in eggs)                {                    if (c.currentLife > c.Life)                    {                        chikens.Add(chiken.get(10, 1));                        tmpEgg.Add(c);                    }                    else                        c.currentLife++;                }                remove<Egg>(eggs, tmpEgg);            }            return new Result() {  chiken=chikens.Count , egg=eggs.Count };         }        void remove<T>(List<T> source, List<T> some)        {            foreach (var i in some)                source.Remove(i);        }        public class chiken        {            public static chiken get(int life, int currentlife)            {                return new chiken() { Life=life, currentLife =currentlife  };            }            public int Life { set; get; }            public int currentLife { set; get; }         }        public class Egg        {            public static Egg get(int life, int currentlife)            {                return new Egg() { Life = life, currentLife = currentlife };            }            public int Life { set; get; }            public int currentLife { set; get; }         }        public class Result         {            public int chiken { set; get; }            public int egg { set; get; }        } 

读书人网 >软件架构设计

热点推荐