免费注册 查看新帖 |

Chinaunix

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

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

论坛徽章:
0
131 [报告]
发表于 2004-05-21 12:11 |只看该作者

母牛数量算法

int calc_cow(int n)
{
        int cows[]={1,0,0,0},i;
        for(i=0;i<n;++i)
        {
                int t=cows[3];
                cows[3]+=cows[2];
                cows[2]+=cows[1];
                cows[1]+=cows[0];
                cows[0]=t;
        }
        return cows[0]+cows[1]+cows[2]+cows[3];
}

论坛徽章:
0
132 [报告]
发表于 2004-05-21 12:16 |只看该作者

母牛数量算法

上面有误!

unsigned calc_cow(unsigned n)
{
        unsigned cows[]={1,0,0,0},i;
        for(i=0;i<n;++i)
        {
                unsigned t=cows[3];
                cows[3]+=cows[2];
                cows[2]=cows[1];
                cows[1]=cows[0];
                cows[0]=t;
        }
        return cows[0]+cows[1]+cows[2]+cows[3];
}

cows[50]==5453761

论坛徽章:
0
133 [报告]
发表于 2004-07-17 14:32 |只看该作者

母牛数量算法

看完了,感谢楼上诸位

论坛徽章:
0
134 [报告]
发表于 2004-09-25 17:30 |只看该作者

母牛数量算法

为什么都是生的母牛?

论坛徽章:
0
135 [报告]
发表于 2004-09-25 21:20 |只看该作者

母牛数量算法

long borncow(int n)
{
        int i;
        long born[4]={1,1,1,2};
        for(i=0;i<((n%4 == 0) ? n/4-1 : n/4);i++){
                born[0]=born[3]+born[1];
                born[1]=born[0]+born[2];
                born[2]=born[1]+born[3];
                born[3]=born[2]+born[0];
        }
        return born[(n+3)%4];
}

论坛徽章:
0
136 [报告]
发表于 2004-09-25 21:37 |只看该作者

母牛数量算法

我觉得像这种递推f(n)=f(n-1)+f(n-3)公式用非递归算法求解都有一种模式
born[0]=born[3]+born[1];         0    3     1
born[1]=born[0]+born[2];         1    0     2
born[2]=born[1]+born[3];         2    1     3
born[3]=born[2]+born[0];         3    2     0

直接按着顺序写,像0 1 2 3 ,再修改一下OK了
^_^

论坛徽章:
0
137 [报告]
发表于 2004-09-25 22:09 |只看该作者

母牛数量算法

long borncow(int n)
{
        int i;
        long born[5]={1,1,1,1,2};
        for(i=0;i<((n%5 == 0) ? n/5-1 : n/5);i++){
                born[0]=born[4]+born[1];
                born[1]=born[0]+born[2];
                born[2]=born[1]+born[3];
                born[3]=born[2]+born[4];
                born[4]=born[3]+born[0];
        }
        return born[(n+4)%5];
}

都成模式了^_^


测试代码

int main()
{
        int n=0;
        printf("Input n=";
        scanf("%d",&n);
        printf("%ld",borncow(n));
        exit(1);
}
只是测试,所以写的简单,没有考虑出错情况:)

论坛徽章:
0
138 [报告]
发表于 2004-09-25 22:45 |只看该作者

母牛数量算法

把题目改一下:
    一个女孩80年出生,当她20岁的时候(2000)年开始生孩子,每年生一女孩,生到40岁为止。请问:N年后,她有多少子孙?

论坛徽章:
0
139 [报告]
发表于 2004-10-15 16:00 |只看该作者

母牛数量算法

有意思

论坛徽章:
0
140 [报告]
发表于 2004-10-15 17:21 |只看该作者

母牛数量算法

我写的,很垃圾,但是好像可以算出来
#include "stdafx.h"
#define year 10
void main()
{
        int moggy=1;
        int year1=0;
        int year2=0;
        int array[year];
        for (int i=0;i<year;i++)
                array=1;
       if (year<4)
                std::cout<<"moggy numbers="<<moggy<<"\n";
        else
        {
                array[3]=2;
                for(int i=4;i<year;i++)
                array=array[i-1]+array[i-4];
                moggy=array[year-1];
                std::cout<<"moggy numbers="<<moggy<<"\n";
        }
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP