小弟問一到母雞下蛋的算法題目

陳約翰 2012-01-05 10:15:39
一開始有一只母雞,到第四天會下一個蛋,以後每一天都會下一個蛋。四天後,第一個蛋變成了母雞,四天後,第二只母雞又會下一個蛋。同時每只雞的生命週期為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天蛋生的母雞開始下蛋)

.....

各位大大能提供一下思路嗎?下弟謝過
...全文
206 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
keeya0416 2012-01-07
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 litaoye 的回复:]
keeya0416最后的答案是对的,我给的是错的。
[/Quote]
我答案好像也错了
因为
1、n-1天的鸡到n天有死亡的;
2、n-8天的鸡在n-4天也有部分死亡而没下蛋的;
所以我最后的公式是:
f(n)= 0 n<0;
= 1 n<8;
= n-6 n<10;
= n-7 n<14;
= f(n-8)+f(n-9)+f(n-10)+f(n-11)+f(n-12)+f(n-13) n>=14
陳約翰 2012-01-06
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 litaoye 的回复:]
另类斐波那契数列,
f(n) = f(n - 1) + f(n - 8) - f(n - 10) 鸡的数量
lz自己推算一下蛋的数量吧,也是这个思路
[/Quote]

多謝版主,小弟算蛋還是算不出...
剛開始研究算法,不知道怎麼推導出蛋的公式...
keeya0416 2012-01-06
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 lesliealantam 的回复:]
引用 3 楼 litaoye 的回复:
另类斐波那契数列,
f(n) = f(n - 1) + f(n - 8) - f(n - 10) 鸡的数量
lz自己推算一下蛋的数量吧,也是这个思路


多謝版主,小弟算蛋還是算不出...
剛開始研究算法,不知道怎麼推導出蛋的公式...
[/Quote]
你好好理解下litaoye的思路就知道蛋的公式了,几乎是一样的
绿色夹克衫 2012-01-06
  • 打赏
  • 举报
回复
keeya0416最后的答案是对的,我给的是错的。
cnmhx 2012-01-06
  • 打赏
  • 举报
回复
这是典型的递推算法。
也可以递归实现。
keeya0416 2012-01-06
  • 打赏
  • 举报
回复
因为楼主这个题目第1天的鸡是第4天下蛋,而后边的鸡是4天后下蛋
所以为了统一,设第0天有一只鸡
所以我的公式是

f(n) = 0 n<0;
1 0<=n<=7;
f(n-1) + f(n-8) - f(n-10) + f(n-11); n>7
requested 2012-01-06
  • 打赏
  • 举报
回复
        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; }
}
keeya0416 2012-01-06
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 keeya0416 的回复:]
引用 3 楼 litaoye 的回复:
另类斐波那契数列,
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)?
[/Quote]
哦错了
我想说的是
f(n) = f(n-1) + f(n-8) - f(n-10) + f(n-11)?
keeya0416 2012-01-06
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 litaoye 的回复:]
另类斐波那契数列,
f(n) = f(n - 1) + f(n - 8) - f(n - 10) 鸡的数量
lz自己推算一下蛋的数量吧,也是这个思路
[/Quote]
litaoye兄
我怎么认为这里多减了一部分呢
最后减掉的应该是10天前出生的鸡,是不是应该是
f(n) = f(n-1) + f(n-8) - f(n-10) + f(n-18)?
面包大师 2012-01-05
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 litaoye 的回复:]
另类斐波那契数列,
f(n) = f(n - 1) + f(n - 8) - f(n - 10) 鸡的数量
lz自己推算一下蛋的数量吧,也是这个思路
[/Quote]
楼上牛。。。我还在自己按部就班的推导,要多向你们学习
绿色夹克衫 2012-01-05
  • 打赏
  • 举报
回复
另类斐波那契数列,
f(n) = f(n - 1) + f(n - 8) - f(n - 10) 鸡的数量
lz自己推算一下蛋的数量吧,也是这个思路
面包大师 2012-01-05
  • 打赏
  • 举报
回复
蛋也一样啊。。。只存在存在四天
陳約翰 2012-01-05
  • 打赏
  • 举报
回复
算蛋算得蛋疼死了

33,010

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧