利用C++编写母牛生小牛的程序怎么写啊?

利用C++编写母牛生小牛的程序怎么写啊?,第1张

以下程序冲搏假设的是开始时(第0年)母牛还不生牛小一头小牛,第一年满了才开始生牛,即第一年后牛总数 2 头。

复杂度O(n*(n-3))

#include<iostream.h>

int main()

{

int n,i,sum

cout<<"输入测试年数,输0结束测试."<<endl

cin>>n

while( n ) //多余4年时母牛生的小牛会生小牛

{

if (n<5) //不足4年时母牛生的小牛不会生小牛

{

sum=1

sum += n

cout<<"第"<<n<<"年 共"<<sum<<"头"<<endl

cin>>n

}

else

{

sum = 4

for (i=n-3i>0 i--) //循环n-3次,最后三年生散穗祥的3头小族洞牛还不会生小牛

{

sum += i

}

cout<<"第"<<n<<"年 共"<<sum<<"头"<<endl

cin>>n

}

}

return 0

}

递归效率低是正常的,毕竟频繁的函数调用是要占据大量的时间空间。

如果该题不是一定要用递归算法的话,我给你个新的算法(肯定不会超时),但是代码我就不颂碰谈写了,因为很简单。

初始化 int cow_age[4] = {1, 0, 0, 0}分别代表出生1年、出生2年、出生3年、出生4年以后的母牛数目,最初有个出生1年的母牛(题目给出)。

然后设置循环变量i,i每自加一次就代表过一年,循环内容是

cow_age[3]+ = cow_age[2] //3岁的母吵瞎牛长到了4岁

cow_age[2] = cow_age[1] //2岁的母牛长到了3岁

cow_age[1] = cow_age[0] //1岁的母牛长到了2岁

cow_age[0] = cow_age[3] //每个野碰4岁以上的母牛生了一只1岁的小牛

总数就是 cow_age[0]+cow_age[1]+cow_age[2]+cow_age[3]。

理解应该没问题吧

我用递归的方法写了个, 非递归的方法暂时没想出来:

#include <stdio.h>

void Cow(int* femaleCow, int n)

{

    for(int i = 1 i <= n ++i)

    {

        *femaleCow += 1

        if(i + 4 <= n)

            Cow(femaleCow, n - (i + 4) + 1)

    }

}

int main()

{

    for(int i = 1 i <= 20 ++i)

    {

        int 槐闭femaleCow = 1

    

        Cow(&femaleCow, i)

    

        printf("第 %2d 年: %3d 头母牛\n", i, femaleCow)

    }

}

也不能肯定对你的问题有没有理解对, 以下是渣野测试结果,你要的答案的第20年的:

第  1 年:   2 头母牛如明喊 // 第一头母牛加她生的小牛

第  2 年:   3 头母牛 // 依次类推

第  3 年:   4 头母牛

第  4 年:   5 头母牛

第  5 年:   7 头母牛 // 第一年生的小牛开始生了

第  6 年:  10 头母牛 // 第二年生的小牛也开始了

第  7 年:  14 头母牛

第  8 年:  19 头母牛

第  9 年:  26 头母牛

第 10 年:  36 头母牛

第 11 年:  50 头母牛

第 12 年:  69 头母牛

第 13 年:  95 头母牛

第 14 年: 131 头母牛

第 15 年: 181 头母牛

第 16 年: 250 头母牛

第 17 年: 345 头母牛

第 18 年: 476 头母牛

第 19 年: 657 头母牛

第 20 年: 907 头母牛

不知道你要的是不是这样的结果?


欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/yw/12539783.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存