免费注册 查看新帖 |

Chinaunix

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

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

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
11 [报告]
发表于 2003-08-03 23:02 |只看该作者

母牛数量算法

呵呵,是啊。

对了,楼上的,我用TC2。0编译你的程序,怎么给50多,给100的时候就计算出负的值啊?

还有,你的程序里,第四个年头算的是牛3周岁的时候吧?这样,你第七年的时候就会有6头牛,而我的算法才有4头牛。

我的递归算100,快半小时了,还没结果。
算55的时候就有时间感了,结果是19795288。

还有,你的main函数里调用的atoi函数,是干什么的呀?

今天没时间了,去睡觉,明天继续想。

论坛徽章:
0
12 [报告]
发表于 2003-08-03 23:49 |只看该作者

母牛数量算法

原帖由 "灰色轨迹" 发表:
aero  

如果能推导一个公式出来应该可以不用递归了,这对数学基础要求就高了:(
   

我可以推出一个公式,我就是用公式做的,不过要分开,0<=n<=3;n=4,n=5;n>;5这几段,应该可以,后面用一个循环好象都、可以了,我还没有做,应该可以

论坛徽章:
0
13 [报告]
发表于 2003-08-04 00:36 |只看该作者

母牛数量算法

这是我的:
   
  1. /* 若一头小母牛,从出生起第四个年头开始每年生一头母牛,
  2. * 按此规律,第n年有多少头母牛?
  3. */
  4. #include <stdio.h>;

  5. long num_cow(int n)
  6. {
  7.    int i;
  8.    long sum = 1;
  9.    for (i = 3; i < n; i++)
  10.       sum += num_cow(n - i);
  11.    return sum;
  12. }

  13. void main()
  14. {
  15.    int n;
  16.    printf("please input n years: ");
  17.    scanf("%d",&n);
  18.    printf("Kao: %ld\n", num_cow(n));
  19. }
复制代码


题目出的不清楚,这第四年算几岁啊 (这一出生算第几年啊),虚岁是4岁,实足是3岁,我是按实足3岁算的,如果要按实足4岁,把我的code中 i 的初始值由3改为4就行。

唉,搂住,你有什么公式,拿出来大伙瞧瞧,把你的code也贴出来吧,还有,你最好把这个帖子的标题改了,改为(关于母牛的算法问题),这样比较好,一目了然。

论坛徽章:
0
14 [报告]
发表于 2003-08-04 02:06 |只看该作者

母牛数量算法

原帖由 "小飞爱使申华" 发表:

题目出的不清楚,这第四年算几岁啊 (这一出生算第几年啊),虚岁是4岁,实足是3岁,我是按实足3岁算的,如果要按实足4岁,把我的code中 i 的初始值由3改为4就行。

唉,搂住,你有什么公式,拿出来大伙瞧瞧,把..........
   

应该是这样的:在第四年初生一头,第四年初有两头,这样下去,每头牛在第四年初开始生第一头,大于第四年就继续生。
在第六年开始,第n年的头数为sum=born(k-1)+(k-5),意思就是第n-1年有a头,n有b头,n+1有c头,那c=b+(n+1-5),b=a+(n-5),
直接来说就是明年减去今年的数量比今年减去年的数量大1。
我用vc:
#include<iostream.h>;
long born( unsigned  int k)
{                                                                                                                                                        
                if(k<=5)
                        return 3;
                else
                {int sum;
                               sum=born(k-1)+(k-5);
                        return sum;
                        }
                }
void main()
{
        int n,a;
        cin>;>;n;
        a=born(n);
                   if(n<=3)
        {int sum=1;
                 cout<<"when k<=3,there isonly "<<sum<<"cow!"<<endl;
        }
        else if(n==4||n==5)
        {
               int sum=n-2;
        cout<<"when k==4||k==5,there is  "<<sum
                                <<" cow!"<<endl;
        }
        else
        cout<<"when the year is"<<n<<",the number of cow is:"
                    <<a<<endl;
}



如果要看它每一步的计算结果,如下:
#include<iostream.h>;
long born( unsigned  int k)
{                                                                                                                                                        
                if(k<=5)
                        return 3;
                else
                {int sum;
                               sum=born(k-1)+(k-5);
cout<<"when the year is"<<n<<",the number of cow is:"
                    <<a<<endl;

                        return sum;
                        }
                }
void main()
{
        int n,a;
        cin>;>;n;
        a=born(n);
                   if(n<=3)
        {int sum=1;
                 cout<<"when k<=3,there isonly "<<sum<<"cow!"<<endl;
        }
        else if(n==4||n==5)
        {
               int sum=n-2;
        cout<<"when k==4||k==5,there is  "<<sum
                                <<" cow!"<<endl;
        }
        else
        cout<<"when the year is"<<n<<",the number of cow is:"
                    <<a<<endl;
}


我算得n=100只是4563头,其实我也觉得不可能有上面这些人算得那么多,因为只是等差(公差只是每一年增加1)增加而已

论坛徽章:
0
15 [报告]
发表于 2003-08-04 02:44 |只看该作者

母牛数量算法

原帖由 "loveguohuasai" 发表:
   

应该是这样的:在第四年初生一头,第四年初有两头,这样下去,每头牛在第四年初开始生第一头,大于第四年就继续生。
在第六年开始,第n年的头数为sum=born(k-1)+(k-5),意思就是第n-1年有a头,n有b头,n+1?.........
   

不是,公式应该是f(n)=f(n-1)+f(n-3),这次绝对是对的了

论坛徽章:
0
16 [报告]
发表于 2003-08-04 02:59 |只看该作者

母牛数量算法

原帖由 "loveguohuasai" 发表:
   

不是,公式应该是f(n)=f(n-1)+f(n-3),这次绝对是对的了
   

n=45时得12322413,n=100时要很久不知道为什么。不等了

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

母牛数量算法

原帖由 "loveguohuasai" 发表:
   

不是,公式应该是f(n)=f(n-1)+f(n-3),这次绝对是对的了


你这也算递归啊!

论坛徽章:
0
18 [报告]
发表于 2003-08-04 03:09 |只看该作者

母牛数量算法

原帖由 "loveguohuasai" 发表:
   

不是,公式应该是f(n)=f(n-1)+f(n-3),这次绝对是对的了


可你这也是递归啊!只要自己调自己就算了。

论坛徽章:
0
19 [报告]
发表于 2003-08-04 03:10 |只看该作者

母牛数量算法

原帖由 "loveguohuasai" 发表:
   

n=45时得12322413,n=100时要很久不知道为什么。不等了


    #include<iostream.h>;
long born( unsigned  int k)
{                                                                                                                                                        
                if(k<4)
                        return 1;
                else
                {int sum;
                                sum=born(k-1)+born(k-3);
                                return sum;
                        }
                }
void main()
{
        int n;
        cin>;>;n;
  long a=born(n);
                   if(n<4)
                   {int sum=1;
                 cout<<"when n<4,there is only "<<sum<<" cow!"<<endl;
        }
       
        else
                cout<<"when the year is"<<n<<",the number of cow is:"
                    <<a<<endl;
}



n=70就要很久了,是什么 问题?

论坛徽章:
0
20 [报告]
发表于 2003-08-04 03:13 |只看该作者

母牛数量算法

因为有递归,要压栈,很费资源的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP