免费注册 查看新帖 |

Chinaunix

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

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

论坛徽章:
0
121 [报告]
发表于 2003-10-03 09:07 |只看该作者

母牛数量算法

在下初学C(四天了),所以写了一个粗略的非可执行码来以供参详。
在下以四年后牛一头为标准,也就是第五年初生出。

Howcow(int n)
{
    int i;
    long int addcow[n+1],x=0;//加一是在下习惯,数组值表示每年新增牛数。
    if(n<=4) printf("1";
    else if(n==5) printf("2";
    else {
    addcow[0]=addcow[1]=addcow[2]=addcow[3]=0;
    addcow[4]=1;
    for(i=5;i<n;i++)
         addcow=addcow[i-1]+addcow[i-4];
    for(i=0;i<n;i++)
         x=addcow+x;
    printf(x+1值);//加一是为了加上所有母牛的母亲这头牛
}

main()
{
    int n;
    scanf(输入N值);/*N为年数*/
    Howcow(n);
}

新增牛数量是一个整数序列,所以用在计数问题上应该比递归要快。

论坛徽章:
0
122 [报告]
发表于 2003-11-19 11:41 |只看该作者

母牛数量算法

呵呵,来一个看看

#include        <string.h>;
#include        <math.h>;

#define                NYEARS        50
#define                BORN        3

int born(int year)
{
        int        tmp,count=0,son=0;

        tmp = year-BORN;
        if ( tmp<=0 ) return 0;

        count = tmp;

        for ( ;tmp>;=0;tmp-- )
        {       
                son = son + born( tmp );
        }

        return count+son;
}

void main()
{
        int itmp;

        for (itmp = NYEARS;itmp>;=0;itmp--)
                printf( "%d years later cows=[%ld]\n",itmp,born(itmp)+1 );
       
        exit(0);
}

论坛徽章:
0
123 [报告]
发表于 2004-02-25 15:23 |只看该作者

母牛数量算法

看了一下楼主的帖子,大家都在研究算法,我非常赞成不用递归, 但是这位仁兄用的循环有点多,我写了个小程序,大家给研究研究,请多提意见

int main(int argc, char *argv[])
{
    long cow;
    int year;
    cow = 0;
    year = 0;
   
    if(argc != 2)
    {
        printf("year must be entered!\n";
        exit(0);
    }
   
    sscanf(argv[1], "%d", &year);
   
    cow = get_cow(year);
   
    printf("----year = %d\n----cow = %u\n", year, cow);
}

int get_cow(int year)
{
    long new_cow;
    long total;
    long cow[3];
    int i;
   
    new_cow = 0;
    memset(&cow, 0x00, sizeof(cow));
    cow[0] = 1;
    total = 0;
   
    for(i = 1; i <= year; i++)
    {
        new_cow = cow[2];
        cow[2] += cow[1];
        cow[1] = cow[0];
        cow[0] = new_cow;
    }
   
    total =cow[0] + cow[1] + cow[2];
    return total;
}

论坛徽章:
0
124 [报告]
发表于 2004-02-25 15:25 |只看该作者

母牛数量算法

以下是简单的调试结果
[83] % ./cow 1
----year = 1
----cow = 1
[85] % ./cow 2
----year = 2
----cow = 1
[86] % ./cow 3
----year = 3
----cow = 2
[87] % ./cow 4
----year = 4
----cow = 3
[88] % ./cow 5
----year = 5
----cow = 4
[89] % ./cow  6
----year = 6
----cow = 6
[90] % ./cow 9
----year = 9
----cow = 19
[91] % ./cow 10
----year = 10
----cow = 28
[92] % ./cow 11
----year = 11
----cow = 41
[93] % ./cow 99
----year = 99
----cow = 234467045
[94] % ./cow 100
----year = 100
----cow = 2494520797
[95] % ./cow 101
----year = 101
----cow = 3985051102
[96] %

论坛徽章:
0
125 [报告]
发表于 2004-02-29 21:08 |只看该作者

母牛数量算法

是有个公式的,好像叫什么斐波拉契的。

论坛徽章:
0
126 [报告]
发表于 2004-03-13 10:53 |只看该作者

母牛数量算法

各位,有没有流程图啊!!!!
我很菜, 看程序很累,有没有图让我学习一下吧!
:)
谢谢了!!!

论坛徽章:
0
127 [报告]
发表于 2004-03-17 18:37 |只看该作者

母牛数量算法

不知道大家有没有注意到第二页上stuff990的算法?

无论从效率上来讲,还是从空间上来讲都是最小的。

为什么没有人注意?

论坛徽章:
0
128 [报告]
发表于 2004-03-18 16:21 |只看该作者

母牛数量算法

F(1)=F(2)=F(3)=1
F(4)=2
F(n)=F(n-1)+F(n-4)   [n>;4]

条件是又足够多而且强壮的公牛
要不然增长率会变小的。

论坛徽章:
0
129 [报告]
发表于 2004-05-18 09:55 |只看该作者

母牛数量算法

Here is the simplest solution:

最简单的算法:

#include <iostream>;

using namespace std;

long TallyCow(long n)
{
    if (n < 4) return 1;

    long year[n+1];
    year[0] = year[1] = year[2] = year[3] = 1;
    for (long i = 4; i <= n; ++i)
    {
        year[i] = year[i-1] + year[i-4];
    }
    return year[n];
}

int main()
{
    cout << TallyCow(50) << endl;  // result is 5453761
    return 0;
}

From Massachusetts, USA

论坛徽章:
0
130 [报告]
发表于 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];
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP