重谈奶牛的问题

zh520 2009-04-17 09:27:07
一头奶牛从出生后的第四年开始生育小牛,以后每年生育一头.
给你一头刚出生的小奶牛,20年后共有多少头奶牛!!
在网上看到这个问题,希望大家帮忙解决一下
...全文
159 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
zh520 2009-04-20
  • 打赏
  • 举报
回复
期待高手解答
wangzhe1945 2009-04-18
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 wuyi8808 的回复:]
扩展的斐波拿契数列。
[/Quote]

斐波那契数列又因数学家列昂纳多·斐波那契以兔子繁殖为例子而引入,故又称为“兔子数列”。
  斐波那契数列
  一般而言,兔子在出生两个月后,就有繁殖能力,一对兔子每个月能生出一对小兔子来。如果所有兔都不死,那么一年以后可以繁殖多少对兔子?
  我们不妨拿新出生的一对小兔子分析一下:
  第一个月小兔子没有繁殖能力,所以还是一对;
  两个月后,生下一对小兔民数共有两对;
  三个月以后,老兔子又生下一对,因为小兔子还没有繁殖能力,所以一共是三对;
  ------
  依次类推可以列出下表:
  经过月数:---0---1---2---3---4---5---6---7---8---9--10--11--12
  兔子对数:---1---1---2---3---5---8--13--21--34--55--89-144-233
  表中数字1,1,2,3,5,8---构成了一个数列。这个数列有关十分明显的特点,那是:前面相邻两项之和,构成了后一项。
  这个特点的证明:每月的大兔子数为上月的兔子数,每月的小兔子数为上月的大兔子数,即上上月的兔子数,相加。
  这个数列是意大利中世纪数学家斐波那契在<算盘全书>中提出的,这个级数的通项公式,除了具有a(n+2)=an+a(n+1)/的性质外,还可以证明通项公式为:an=1/√[(1+√5/2) n-(1-√5/2) n](n=1,2,3.....)


上面这个题目跟这个差不多。
Harvey_He 2009-04-17
  • 打赏
  • 举报
回复
zh520 2009-04-17
  • 打赏
  • 举报
回复
这个问题网上一直没个结果,期望高手解答
辰爸 2009-04-17
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 tianshikuqi8 的回复:]
            int m = 0;
            int x=n/4;  /n为规定的年数,此题n为20
            for(int i=1;i <=x;i++)
            {
                for (int j = 1; j <= i;j++ )
                {
                    m++;
                 
               
                }
                Console.Write('\n');
            }
            Console.Write(m);  /m为所产奶牛的数量!!
            Consol…
[/Quote]
错了,没有看清题目!~
ViewStates 2009-04-17
  • 打赏
  • 举报
回复
牛死么?
牛B死么!
vrhero 2009-04-17
  • 打赏
  • 举报
回复
很久以前就讨论过...自己搜索一下...

但是这个题目描述很有问题...你必须声明生下的都是母牛而且不考虑没有公牛也能生育...否则无答案...
human_2 2009-04-17
  • 打赏
  • 举报
回复
呵呵,最笨的方法算出来跟上面的公式不一样哦345
wangzhe1945 2009-04-17
  • 打赏
  • 举报
回复
我的数学学得不好, 但擅长模拟:

using System;
using System.Collections.Generic;
using System.Text;

namespace Cow
{
class Program
{
static void Main(string[] args)
{
List<Cow> list = new List<Cow>();
list.Add(new Cow()); //第一年只有一只牛
Farm farm = new Farm(list);
farm.BreedXYear(20); //20年的养殖
int count = farm.CowCount;
Console.WriteLine(count.ToString());
Console.ReadLine();
}
}

public class Cow
{
/// <summary>
/// 年龄
/// </summary>
protected int m_age;

public Cow()
{
m_age=0;
}

/// <summary>
/// 生长
/// </summary>
public void Growth(out Cow smallcow)
{
m_age++;
smallcow = BirthCow();
}

public int Age
{
get
{
return m_age;
}
}

/// <summary>
/// 生小牛
/// </summary>
/// <returns></returns>
protected Cow BirthCow()
{
if (m_age > 3)
{
Cow cow = new Cow();
return cow;
}
else
{
return null;
}
}

}

//农场
public class Farm
{
private List<Cow> m_cowList;

public Farm(List<Cow> cowList)
{
this.m_cowList = cowList;
}

/// <summary>
/// 一年农场的养殖
/// </summary>
public void BreedOneYear()
{
List<Cow> smallCowList=new List<Cow>();
foreach (Cow item in m_cowList)
{
Cow smallcow;
item.Growth(out smallcow);
if (smallcow != null)
{
smallCowList.Add(smallcow); //小牛加入小牛队伍
}
}
m_cowList.AddRange(smallCowList); //将小牛队伍加入大家庭队伍
}

public void BreedXYear(int Xyears)
{
for (int i = 0; i < Xyears; i++)
{
BreedOneYear();
}
}

/// <summary>
/// 返回牛的总数目
/// </summary>
/// <returns></returns>
public int CowCount
{
get
{
return m_cowList.Count;
}
}

}


}

结果如下: 345
tabbycat 2009-04-17
  • 打赏
  • 举报
回复
1头吧,也有可能0头,还有可能是N头

因为1头奶牛是生不出奶牛的,所有是1头
如果连这头也死了,那就是0头
如果使用克隆技术的话,那是N头
wuyi8808 2009-04-17
  • 打赏
  • 举报
回复
扩展的斐波拿契数列。
辰爸 2009-04-17
  • 打赏
  • 举报
回复
int m = 0;
int x=n/4; /n为规定的年数,此题n为20
for(int i=1;i<=x;i++)
{
for (int j = 1; j <= i;j++ )
{
m++;


}
Console.Write('\n');
}
Console.Write(m); /m为所产奶牛的数量!!
Console.ReadLine();
sharp_future 2009-04-17
  • 打赏
  • 举报
回复
比较麻烦啊
刚出生的奶牛,那就要4年后,你有2头奶牛了,从剩下的16年开始算吧
英雄在线 2009-04-17
  • 打赏
  • 举报
回复
0.5*(n-3)*(n-3)-0.5*n
英雄在线 2009-04-17
  • 打赏
  • 举报
回复
这个很简单
开始有1头
n年后有0.5*(n-1)*(n-1)-0.5
你核对下
用微积分
hyfei0315 2009-04-17
  • 打赏
  • 举报
回复
母牛生的都是公牛
maplevssnow 2009-04-17
  • 打赏
  • 举报
回复
这个问题本身就存在着提出问题的惯性错误``就是说具体的东西没说明白 如果照你这样说折不考虑别的因素???人的想象是无限的`

110,530

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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