免费注册 查看新帖 |

Chinaunix

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

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

论坛徽章:
0
181 [报告]
发表于 2006-03-24 16:18 |只看该作者
<code>
#include <stdio.h>

int cow_num(int years)
{
        if(years < 4)
                return 1;
        else
                return (cow_num(years - 1) + cow_num(years -4));
}

main()
{
        int years;
        printf("input the max years:");
        scanf("%d", &years);
        printf("after %d years, there are %d cows\n", years, cow_num(years));
}

</code>

the number of the cows is the number in the last year but one add the number of cows born in the last years.
but the cows born in last three years cannot have their babies.

[ 本帖最后由 ganqing1234 于 2006-4-12 18:15 编辑 ]

论坛徽章:
0
182 [报告]
发表于 2006-05-25 15:17 |只看该作者
[mhung@mybsd ~]$cat fibo.c
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>

long long
fibo(int n)
{
        return (n < 4) ? 1 : fibo(n - 1) + fibo(n - 3);
}

long long
fibo_non(int n)
{
        long long       cows  [4] = {1, 1, 1, 2}, i;
        for (i = 4; i <= n; i++)
                cows[i % 4] = cows[(i - 3) % 4] + cows[(i - 1) % 4];
        return cows[(n - 1) % 4];
}

int
main(int argc, char *argv[])
{
        int             num       , ch;
        num = 1;

        while ((ch = getopt(argc, argv, "n:")) != -1)
                switch (ch) {
                case 'n':
                        num = atoi(optarg);
                        break;
                case '?':
                default:
                        exit(1);
                }

        argc -= optind;
        argv += optind;

//      printf("year %d born:%ld\n", num, fibo(num));
        printf("year %d born_non:%ld\n", num, fibo_non(num));
}
[mhung@mybsd ~]$

论坛徽章:
0
183 [报告]
发表于 2006-05-25 15:28 |只看该作者
[mhung@mybsd ~]$i=1 && while true; do if [ $i -le 50 ] ;then ./fibo -n $i ;let i+=1; else break ;fi;done
year 1 born_non:1
year 2 born_non:1
year 3 born_non:1
year 4 born_non:2
year 5 born_non:3
year 6 born_non:4
year 7 born_non:6
year 8 born_non:9
year 9 born_non:13
year 10 born_non:19
year 11 born_non:28
year 12 born_non:41
year 13 born_non:60
year 14 born_non:88
year 15 born_non:129
year 16 born_non:189
year 17 born_non:277
year 18 born_non:406
year 19 born_non:595
year 20 born_non:872
year 21 born_non:1278
year 22 born_non:1873
year 23 born_non:2745
year 24 born_non:4023
year 25 born_non:5896
year 26 born_non:8641
year 27 born_non:12664
year 28 born_non:18560
year 29 born_non:27201
year 30 born_non:39865
year 31 born_non:58425
year 32 born_non:85626
year 33 born_non:125491
year 34 born_non:183916
year 35 born_non:269542
year 36 born_non:395033
year 37 born_non:578949
year 38 born_non:848491
year 39 born_non:1243524
year 40 born_non:1822473
year 41 born_non:2670964
year 42 born_non:3914488
year 43 born_non:5736961
year 44 born_non:8407925
year 45 born_non:12322413
year 46 born_non:18059374
year 47 born_non:26467299
year 48 born_non:38789712
year 49 born_non:56849086
year 50 born_non:83316385
[mhung@mybsd ~]$

论坛徽章:
0
184 [报告]
发表于 2006-06-13 17:00 |只看该作者

测试

测试

论坛徽章:
0
185 [报告]
发表于 2006-06-16 23:15 |只看该作者
原帖由 loveguohuasai 于 2003-8-3 17:14 发表
若一头小母牛,从出生起第四个年头开始每年生一头母牛,按此规律,第n年有多少头母牛?

/*****************************************************************************************/
大家都比较感兴趣,我也来发表一下我的想法

从小母牛出生开始算0年,到了第4年就生一头母牛,我得出这一个规律
-------------------------------------------------
         年          牛的头数
0x4      0              1       2的0次幂=1
1x4      4              2       2的1次幂=2
2x4      8              4       2的2次幂=4
3x4      12             8       2的3次幂=8
4x4      16             16      2的4次幂=16
---------------------------------------------------
要想知道n年后有多少头母牛?
2^(n/4)
这样写程序就不难了
      1 #include <stdio.h>
      2 #include <math.h>
      3
      4 int n=100;        //年
      5 int a=2;        //牛
      6 int fun(int n)
      7 {
      8         return pow(a,n/4);
      9         printf("a=%n", n);
     10 }
     11
     12 main()
     13 {
     14         printf("%d\n",fun(n));
     15 }
如果把死去的牛也包含在内,100年就是33554432头牛,估计得发了,还写什么程序啊。

论坛徽章:
0
186 [报告]
发表于 2006-06-16 23:33 |只看该作者
看错了,是4年后每年生一头,不是每隔4年生一头,改天再来

论坛徽章:
0
187 [报告]
发表于 2006-06-17 00:28 |只看该作者
3 年前的贴子至今还能浮上来,厉害
Bluetea 该用户已被删除
188 [报告]
发表于 2006-06-17 06:29 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
189 [报告]
发表于 2006-06-19 23:51 |只看该作者

非递归!

main(){
    int  x1,x2,x3,x4,a1,a2,a3,a4,t,s,i;
    x1=0;
    x2=0;
    x3=0;
    x4=1;
    a1=0;
    a2=0;
    a3=0;
    a4=0;
    s=0;
    scanf("%d",&t);
    if(t<5)
      s=1;
    else
      {
       for(i=1;i<=(t-4);i++)
       {
          a1=x1;
          a2=x2;
          a3=x3;
          a4=x4;
          x1=a4;
          x2=a1;
          x3=a2;
          x4=a3+a4;
          s=x1+x2+x3+x4;
        }
       }
    printf("\n#####%d#####\n",s);

}



50            3951206
100           566194214

论坛徽章:
0
190 [报告]
发表于 2006-06-20 17:05 |只看该作者
强阿
好算法
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP