top1编程
← 返回题目
题解

奶牛吃草

1 条题解

  • 0
    @ 2026-8-5 21:17:14

    P4287 奶牛吃草(入门)

    解题思路

    先把条件翻译成数学:n 头奶牛,每头每天吃 5 斤草,那么每天一共要吃 n×5 斤草。m 斤草能吃多少天?用整除:天数 d = m / (n×5)。

    为什么用整除?因为"够吃几天"问的是完整的天数。比如 249 斤草、每天吃 25 斤,249 / 25 = 9 天(还剩 24 斤,不够完整吃第 10 天),所以是 9 天,不是 9.96 天。

    然后判断:如果 d ≥ 10,说明够吃 10 天以上,输出 d;否则输出 NO。

    边界情况:

    • n 最小 1、m 最小 1:1 头牛每天吃 5 斤,1 斤草 d = 1/5 = 0,0 < 10,输出 NO。
    • n 最大 100、m 最大 5000:每天吃 500 斤,d = 5000/500 = 10,正好够 10 天,输出 10。所以判断要用 d >= 10,别漏了等于 10 的情况。
    • 样例 5 头牛、249 斤草:每天 25 斤,249/25 = 9,9 < 10,输出 NO,和样例一致。

    参考代码

    // 用途:n头奶牛每天吃5斤草,判断m斤草够吃10天吗,够则输出能吃的天数
    #include <iostream>
    using namespace std;
    
    int main() {
        int n, m;
        cin >> n >> m;
        // 每天消耗 n*5 斤草,能吃的天数 = m / (n*5)(整除,向下取整)
        int d = m / (n * 5);
        if (d >= 10) cout << d << endl;   // 够吃10天及以上,输出实际天数
        else cout << "NO" << endl;        // 不够10天,输出NO
        return 0;
    }
    

    复杂度分析

    只做一次乘法、一次除法和一次比较,时间复杂度 O(1),额外空间 O(1)。m 最大 5000,n×5 最大 500,商最大 10,全部在 int 范围内,不会溢出。

    • 1