1 条题解

  • 0
    @ 2025-8-24 21:16:40

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar chen_zhe
    Aya 敲可爱的~

    搬运于2025-08-24 21:16:39,当前版本为作者最后更新于2024-11-12 17:31:30,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    欢迎报名洛谷网校,期待和大家一起进步!

    本题有两种思路。

    思路 1:数学法

    想购买相同数量的商品 A 和商品 B,可以把一个 A 商品和一个 B 商品打包为一个C 商品,其价值是 a+ba+b。所求解的问题变成能够购买多少个商品 C,答案自然就是 na+b\dfrac{n}{a+b} 向下取整的值。在 C++ 中,正整数除法的答案直接向下取整。

    因此代码可以编写为(只展示关键代码):

    int n,a,b;
    cin >> n >> a >> b;
    cout << n / (a + b);
    

    思路 2:循环枚举法

    如果没有想到打包,也不要紧。题目问最多能够购买多少个商品,我们可以使用计算机强大的计算能力逐一尝试。我们使用循环,让循环变量 ii0,1,2,30,1,2,3\dots 逐一尝试,所用的金额是 i×a+i×bi\times a+i\times b,与小杨拥有的金额 nn 做比较,如果大于 nn 就结束循环,输出 i1i-1 即可。

    因此代码可以编写为(只展示关键代码):

    int n, a, b, i;
    cin >> n >> a >> b;
    for (i = 0; a * i + b * i <= n; i++);
    // 让循环变量 i 从 0,1,2,... 进行尝试,如果金额(a * i + b * i)大于了 n,会退出循环。
    cout << i - 1;
    
    • 1

    信息

    ID
    10786
    时间
    1000ms
    内存
    512MiB
    难度
    1
    标签
    递交数
    0
    已通过
    0
    上传者