红联Linux门户
Linux帮助

简单C语言

发布时间:2011-10-23 10:12:34来源:红联作者:wmqj
[i=s] 本帖最后由 wmqj 于 2011-10-23 10:18 编辑 [/i]

用C语言写出来:谢谢
题目:有一头母牛 在每年年初的时候生三头小母牛,小母牛在第5年之后,在每年年初也可以生三头母牛,设母牛的寿命为20年,则在100年后有多少母牛
文章评论

共有 3 条评论

  1. xiexz 于 2012-02-05 23:40:30发表:

    来晚了,可惜,把母牛看成5叉树,用树结构的特点就相当的轻松。100年后就是100层的树最终剩底下的20层。

  2. 学者 于 2011-10-24 13:03:04发表:

    饿,数据范围太大时确实麻烦

  3. pl_014 于 2011-10-23 10:12:35发表:

    [i=s] 本帖最后由 pl_014 于 2011-10-23 19:47 编辑 [/i]

    这道题曾经在百度知道上见过,那里要求用递归的方法来做,由于递归算法本身的难懂性,再加上这道题也较复杂,所以没做。这里我就不用递归了。
    首先要说明一下,这道题本身出的就不严谨,有两点,第一点是题中所设的母牛的寿命为20年指的是从出生到死亡一共是20年,还是从长生到死亡为20年,第二个是在母牛寿终正寝的那一年,是否还会再生小母牛,不同的说法有不同的答案,这里假设从长生到死亡为20年,寿终正寝的那一年,还会再生小母牛。

    先把代码给出来吧[code]#include

    #define YEARS 100

    int main()
    {
    long a=20,i,j,s=0,cows[YEARS];

    for(i=0;i {
    cows[i]=0;

    if(a>0)
    {
    cows[i]+=3;
    a--;
    }

    if(i>=4)
    {
    for(j=i-4;(j>i-25)&&(j>=0);j--)
    cows[i]+=3*cows[j];
    }

    if(i>=25)
    for(j=i-25;j<=i;j++)
    s+=cows[j];
    else
    for(j=0;j<=i;j++)
    s+=cows[j];

    printf("Year %ld add %ld cows. Total %ld cows.\n",i+1,cows[i],s);
    s=0;
    }

    for(i=YEARS-25;i s+=cows[i];

    printf("Total %ld cows.\n",s);

    return 0;
    }[/code]注:要想一次就做得很完美是不容易的,个人觉得写得差不多了,这段代码我改了很多次,你再检查检查吧,程序在最后的输出会有负值,这是因为越界了,我的是64位机,在80多年的时候越了界,如果是32位,还要早。在没有竞争及天敌等情况下,持续100年这样的繁殖肯定会使得个体数暴多,这是生物学的一个基本规律(事实上只要没有天敌,就已经很多了)。至于进位,可以利用算法来实现,但这样子就更麻烦了,你要想追求完美的话可以自己设计一个,也可以声明成long double型,在printf语句里就把%ld改成%LF。