Cows 算法

来源:互联网 发布:手机压缩文件的软件 编辑:程序博客网 时间:2024/04/27 04:12

 

两个方案

1. 循环普通解法

思路:new 一个牛圈,里面每个元素代表一头牛,元素值代表岁数。一年一年的循环计算,每个cow岁数都加一,如果岁数足够大到生孩子的年龄就生一个

int cows(int year) {

        int sum = 1;

        const int N = 100;

        int* cows = new int[N];

        cows[0] = 1;  //first cow is one year old

        for(int i=0; i<year; i++) {

//如果cows容量越界,重新非配空间

                int temp = sum;

                for(int j=0; j<temp; j++) {

                        if(cows[j] >= 4)cows[sum++] = 2;

                        cows[j]++;

                }

        }

        return sum;

}

 

int main() {

        printf("%d/n", cows(10));

        getchar();

        return 0;

}

2. 动态规划算法

思路:n年的牛的总头数  =  1年出生的牛的头数+2年出生的牛的头数+3年出生的牛的头数+。。。

而且 第n年出生的牛的头数 = 第1年出生的牛的头数+第2年出生的牛的头数+第3年出生的牛的头数+。。。第n-3年出生的牛的头数(凡是这些年出生的牛都可以生小牛了)

 

int cows(int year) {

        int* cows = new int[year];

        memset(cows, 0, year*4);

        cows[0] = 1;

        if(year <= 3)return 1;

        for(int i=3; i<year; i++) {

                for(int j=0; j<=i-3; j++)cows[i] += cows[j];

        }

        int sum = 0;

        for(int i=0; i<year; i++) {

                sum += cows[i];

        }

        return sum;

}

 

int main() {

        printf("%d/n", cows(10));

        getchar();

        return 0;

}

 

源文档 <http://bbs.chinaunix.net/archiver/tid-130156-page-12.html>

 

原创粉丝点击