xiexz 于 2012-02-05 23:40:30发表:
来晚了,可惜,把母牛看成5叉树,用树结构的特点就相当的轻松。100年后就是100层的树最终剩底下的20层。
学者 于 2011-10-24 13:03:04发表:
饿,数据范围太大时确实麻烦
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。
xiexz 于 2012-02-05 23:40:30发表:
来晚了,可惜,把母牛看成5叉树,用树结构的特点就相当的轻松。100年后就是100层的树最终剩底下的20层。
学者 于 2011-10-24 13:03:04发表:
饿,数据范围太大时确实麻烦
pl_014 于 2011-10-23 10:12:35发表:
[i=s] 本帖最后由 pl_014 于 2011-10-23 19:47 编辑 [/i]
{
s+=cows[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
printf("Total %ld cows.\n",s);
return 0;
}[/code]注:要想一次就做得很完美是不容易的,个人觉得写得差不多了,这段代码我改了很多次,你再检查检查吧,程序在最后的输出会有负值,这是因为越界了,我的是64位机,在80多年的时候越了界,如果是32位,还要早。在没有竞争及天敌等情况下,持续100年这样的繁殖肯定会使得个体数暴多,这是生物学的一个基本规律(事实上只要没有天敌,就已经很多了)。至于进位,可以利用算法来实现,但这样子就更麻烦了,你要想追求完美的话可以自己设计一个,也可以声明成long double型,在printf语句里就把%ld改成%LF。