免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: loveguohuasai
打印 上一主题 下一主题

[算法] 母牛数量算法 [复制链接]

论坛徽章:
0
31 [报告]
发表于 2003-08-05 02:51 |只看该作者

母牛数量算法

原帖由 "aero" 发表:
目前有两种理解,3周岁开始生小牛和4周岁开始生小牛,姑且都算对的话。

“小飞爱使申华”的做法是对的,很巧妙的只用了一个递归就完成了,他的做法是3周岁开始生小牛。

loveguohuasai的做法是错误的,牛的数目..........
   

我没有发觉你也提到那条公式,f(n)=f(n-1)+f(n-3)(或者n-4),这样本来就是递归了,不用递归简直是犯贱啊 。一个递归,都不用几句就搞定了。

论坛徽章:
0
32 [报告]
发表于 2003-08-05 05:30 |只看该作者

母牛数量算法

#include<stdio.h>;
void main()
{
        long int f[100];
        int i;
        f[0]=1;f[1]=1;f[2]=1;
        for(i=3;i<100;i++)
                f=f[i-1]+f[i-3];
        printf("%ld",f[99]);
}

论坛徽章:
0
33 [报告]
发表于 2003-08-05 08:50 |只看该作者

母牛数量算法

[quote]原帖由 "aero"]zlzj2010的做法里有一个致命的错误,并不是fun(n)=fun(n-1)+fun(n-3),是的确,fun(n-3)的牛在n年可以生牛了,但并不是仅仅这些牛可以生啊,fun(n-1)里也有很大一部分牛可以在第n年继续生小牛啊,你的程序里把这一部分漏掉了[/quote 发表:
     

我觉得地fun(n)年能生小牛的牛的不正是fun(n-3)么?fun(n-1)里是有牛可以生小牛,但它在第n年能生的刚好是fun(n-3)呀,

不只我这思路是否正确?

论坛徽章:
0
34 [报告]
发表于 2003-08-05 09:37 |只看该作者

母牛数量算法

原帖由 "aero" 发表:
目前有两种理解,3周岁开始生小牛和4周岁开始生小牛,姑且都算对的话。

“小飞爱使申华”的做法是对的,很巧妙的只用了一个递归就完成了,他的做法是3周岁开始生小牛。

loveguohuasai的做法是错误的,牛的数目..........
   

PFPF,没想到100就能溢出啊
这些牛真的太牛了。

aero也比较牛。呵呵

论坛徽章:
0
35 [报告]
发表于 2003-08-05 09:48 |只看该作者

母牛数量算法

原帖由 "zlzj2010" 发表:
   

我觉得地fun(n)年能生小牛的牛的不正是fun(n-3)么?fun(n-1)里是有牛可以生小牛,但它在第n年能生的刚好是fun(n-3)呀,

不只我这思路是否正确?
   


你不明白吗?这就是一个总局的想法,抛开其他的只在一个四年内考虑。
“今年的数量等于去年加上四年前的数量“,绝对是这样,否则要递归做什么?
像你说的,(n-1)年也有生牛,但不是在n年啊,在n+2年才生的,意思你也说明白了,在今年(第n年)可以生牛的牛数就是n-3年的数(f(n-3)),不就是f(n)=f(n-1)+f(n-3).绝对没有错

论坛徽章:
0
36 [报告]
发表于 2003-08-05 11:48 |只看该作者

母牛数量算法

对,如果是f(n)=f(n-1)+f(n-3).,那程序更简单了(main函数不变):

  1. long num_cow(int n){
  2.    return (n < 4) ? 1 : num_cow(n-1) + num_cow(n-3);
  3. }
复制代码

论坛徽章:
0
37 [报告]
发表于 2003-08-05 13:33 |只看该作者

母牛数量算法

呵呵,分析得太好了,我当时的做法,没放上来,不过也是同样的问题:递归效率低,而且数据溢出,不知道我的结果对不对:30年 39865头
PS:牛不会活100岁的:)
  1. #include <stdio.h>;

  2. int cow(int n)
  3. {
  4.   unsigned long sum = 1, i;

  5.   if (n <= 3) sum += 0;
  6.   else {
  7.         for (i = 4; i <= n; i++)
  8.                 sum += cow(i-3);
  9.   }
  10.   return(sum);
  11. }

  12. main()
  13. {
  14.   int n;

  15.   printf("input n years, from 1\n");
  16.   scanf("%d", &n);
  17.   printf("total is %ld\n", cow(n));
  18. }  
复制代码

论坛徽章:
0
38 [报告]
发表于 2003-08-05 17:09 |只看该作者

母牛数量算法

原帖由 "chdonald" 发表:
呵呵,分析得太好了,我当时的做法,没放上来,不过也是同样的问题:递归效率低,而且数据溢出,不知道我的结果对不对:30年 39865头
PS:牛不会活100岁的:)
#include <stdio.h>;

int cow(int n)
{
  ..........
  
30年我只算出328头,怎么差这么多??
大家算个小一点的,比如10年,看看结果怎样,10年可以手工算出来: 18头。
大家看看自己的算法对不对!

论坛徽章:
0
39 [报告]
发表于 2003-08-05 17:24 |只看该作者

母牛数量算法

原帖由 "wangz" 发表:
  
30年我只算出328头,怎么差这么多??
大家算个小一点的,比如10年,看看结果怎样,10年可以手工算出来: 18头。
大家看看自己的算法对不对!
   

不对把,10年应该是19头,

30年是39865

论坛徽章:
0
40 [报告]
发表于 2003-08-05 18:12 |只看该作者

母牛数量算法

[quote]原帖由 "chdonald"][/quote 发表:
     

n=30,得到39865,对
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP