#学编程的小白# 2023-08-10 21:34 采纳率: 100%
浏览 4
已结题

母牛问题,为什么答案都是一样的,但我自己的代码运行超时?

题目描述
有一头母牛,它每年年初生一头小母牛。每头小母牛从第四个年头开始,每年年初也生一头小母牛。请编程实现在第n年的时候,共有多少头母牛?

输入格式
输入数据由多个测试实例组成,每个测试实例占一行,包括一个整数n(0 < n < 55),n的含义如题目中描述。 n=0表示输入数据的结束,不做处理。

输出格式
对于每个测试实例,输出在第n年的时候母牛的数量。 每个输出占一行。

这是我的代码


#include<stdio.h>
int muniujihua1(int x, int count1) {
    if (x > 3) {
        x = x - 3;
        while(x>0) {
            muniujihua1(x, count1);
            count1++;
            x--;
        }
    }
    else {
        count1++;
    }return count1;
}
int main()
{
    int n;
    while (scanf_s("%d", &n)) {
        int count = 0;
        if (n == 0) {
            break;
        }
        while(n>0) {
            count=muniujihua1(n, count);
            n--;
        }
        printf("%d\n", count);
    }
    return 0;
}

这是后来查了资料,用公式复刻后的代码

#include <stdio.h>
int muniujihua(int n) {
    if (n <= 4) {
        return n;
    }
    int dp[n + 1];
    dp[1] = 1;
    dp[2] = 2;
    dp[3] = 3;
    dp[4] = 4;
    for (int i = 5; i <= n; i++) {
        dp[i] = dp[i - 1] + dp[i - 3];
    }
    return dp[n];
}

int main() {
    int n;
    while (scanf("%d", &n)) {
        if (n == 0) {
            break;
        }
        printf("%d\n", muniujihua(n));
    }
    return 0;
}

  • 写回答

3条回答 默认 最新

  • qzjhjxj 2023-08-10 22:47
    关注

    想不超时,这么写,供参考:

    #include <stdio.h>
    int main()
    {
        int i,n;
        int a[55]={0,1,2,3,4};
        for (i = 5;i < 55; i++)
               a[i] = a[i-1] + a[i-3];
        while( scanf("%d",&n) && n!=0)
            printf("%d\n",a[n]);
        return 0;
    }
    

    递归费时间,供参考:

    #include<stdio.h>
    int muniujihua1(int x)
    {
        if (x > 1)
            return muniujihua1(x - 3) + muniujihua1(x - 1);
        return  1;
    }
    int main()
    {
        int n;
        while (scanf("%d", &n) && n) {
            int count = 0;
            count=muniujihua1(n);
            printf("%d\n", count);
        }
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 8月19日
  • 已采纳回答 8月11日
  • 创建了问题 8月10日

悬赏问题

  • ¥15 在获取boss直聘的聊天的时候只能获取到前40条聊天数据
  • ¥20 关于URL获取的参数,无法执行二选一查询
  • ¥15 液位控制,当液位超过高限时常开触点59闭合,直到液位低于低限时,断开
  • ¥15 marlin编译错误,如何解决?
  • ¥15 有偿四位数,节约算法和扫描算法
  • ¥15 VUE项目怎么运行,系统打不开
  • ¥50 pointpillars等目标检测算法怎么融合注意力机制
  • ¥20 Vs code Mac系统 PHP Debug调试环境配置
  • ¥60 大一项目课,微信小程序
  • ¥15 求视频摘要youtube和ovp数据集