免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 111065 | 回复: 267
打印 上一主题 下一主题

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

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-08-03 17:14 |只看该作者 |倒序浏览
若一头小母牛,从出生起第四个年头开始每年生一头母牛,按此规律,第n年有多少头母牛?

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

母牛数量算法

是不是老师出的题目,你拿到这里来找答案了,这样可不好,自己做出来才对

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

母牛数量算法

呵呵,自己想想吧
思考也是一种乐趣~~~

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

母牛数量算法

是呀,多多思考啊,自己找答案

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

母牛数量算法

[quote]原帖由 "灰色轨迹"]是不是老师出的题目,你拿到这里来找答案了,这样可不好,自己做出来才对[/quote 发表:
     
自己看书的,看到这道题想了很久都想不到,用递归
但是只是有点阻碍。

说说看

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

母牛数量算法

不用递归啊,想想规律用循环最好了。下面的代码调试过了。
  1. #include <stdio.h>;

  2. int count=0;
  3. int step=1;

  4. int fun(int n){
  5.         int sum=0;
  6.         while(n){
  7.                 sum+=step;
  8.                 count++;
  9.                 if ( count%4==0 )
  10.                         step++;
  11.                 n--;
  12.         }
  13.         return sum;
  14. }

  15. int main(){
  16.         int n;
  17.         printf("input n:");
  18.         scanf("%d",&n);
  19.         printf("result:%d\n",fun(n));
  20. }

复制代码

论坛徽章:
0
7 [报告]
发表于 2003-08-03 21:11 |只看该作者

母牛数量算法

#include <stdio.h>;


int cow(int all_cow, int can_born, int i_born, int ii_born, int iii_born, int year)
{
    all_cow += can_born;
    can_born += iii_born;
    iii_born = ii_born;
    ii_born = i_born;
    i_born = (all_cow - ii_born - iii_born)>;can_born?(all_cow - ii_born - iii_born):can_born;
    year--;
    if (year == 0)
    {
        return all_cow;
    }
    else
    {
        cow(all_cow, can_born, i_born, ii_born, iii_born, year);
    }
   
}

int main(int argc, char* argv[])
{
    if (argc != 2)
    {
        exit(-1);
    }
    printf("%d\n", cow(1, 0, 1, 0, 0, atoi(argv[1])));
}

不知道对不对     

楼上的兄弟
第100年是不是234467045头牛?

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

母牛数量算法

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

不知道对不对     

楼上的兄弟
第100年是不是234467045头牛?
  

我也差不多做出了,差不多像上面那个。

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

母牛数量算法

呵呵,上面大意了做错了。这回应该对了,用递归做的。刚才仔细想了想,没想出来用非递归做的方法。有一点想法:

如果把这个数列看成是连续的,那么牛增长数量的函数似乎是一个n阶可导的函数。是不是这样的函数就必须用递归做,

用非递归就做不出来呢?

求非递归做法。

仔细想想,这题还是挺难的,不过,也许是我太面了,呵呵。

我的算法太不好了,算了2分钟了100的还没计算出来。

  1. #include <stdio.h>;

  2. int inc(int);

  3. int fun(int n){                        /*计算第n年有多少牛的函数。*/
  4.         if ( n==1 ) return 1;
  5.         return inc(n)+fun(n-1);
  6. }

  7. int inc(int n){                        /*计算第n年牛的增长率的函数*/
  8.         if ( n<5 )                return 0;
  9.         else if ( n==5 )        return 1; /*满4周岁的时候开始生小牛,即第5年的增长率为1。*/
  10.         else                         return inc(n-1)+inc(n-4);
  11. }

  12. int main(){
  13.         int n;
  14.         printf("\ninput n:");
  15.         scanf("%d",&n);
  16.         printf("result:%d\n",fun(n));
  17. }

复制代码

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

母牛数量算法

aero  

如果能推导一个公式出来应该可以不用递归了,这对数学基础要求就高了:(
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP