1 条题解

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

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar chen_zhe
    Aya 敲可爱的~

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

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

    以下是正文


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

    本题考查分支结构。

    对于读入的 w,nw,n,我们首先判断 ww 是否小于等于 500500。如果成立的话,则输出 2020

    接着再处理超重的部分。首先,要计算的是:要加收几次费用。例如:10201020 克要加收 22 次超重费用,因为 1020500=5201020-500=520520500=20520-500=20(第一次计算超重),留下的 2020 克用于第二次计算超重。

    可以得出式子,扣除 500500 克计算超重的次数是:(w500)÷500(w-500) \div 500。如果这个除法运算有余数(也就是会有剩余的不足 500500 克的部分),那么次数 +1+1

    接下来,根据目的地区域编号计算加收费用。可以使用 switch 语句或者 if else 结构。参考代码中采用的是 if else 结构。需要注意两点:

    1. 不要抄错数字,确保每个区域的加收价格在程序中正确填写。
    2. 2020 元的费用是基础费用,一定要加进答案中。

    参考代码(部分):

    if (w <= 500)
        cout << 20 << endl;
    else {
        int ex = (w - 500) / 500; //计算加收次数
        if ((w - 500) % 500 != 0) //如果有剩余的不足 500 克的重量,则再额外加上 1 次
            ex++;
        if (n == 1)
            cout << 20 + ex * 4 << endl;
        else if (n == 2)
            cout << 20 + ex * 6 << endl;
        else if (n == 3)
            cout << 20 + ex * 9 << endl;
        else if (n == 4)
            cout << 20 + ex * 10 << endl;
        else
            cout << 20 + ex * 17 << endl;
    }
    

    (易错问题) 思考:代码中的 if else 结构改成下面的代码,为什么是错误的呢?

    if (n == 1)
        cout << 20 + ex * 4 << endl;
    if (n == 2)
        cout << 20 + ex * 6 << endl;
    if (n == 3)
        cout << 20 + ex * 9 << endl;
    if (n == 4)
        cout << 20 + ex * 10 << endl;
    else
        cout << 20 + ex * 17 << endl;
    

    答案:else 结构承接在 if (n == 4) 里,因此只要 nn 不等于 44,就会进入 else 语句,输出多余的内容。

    • 1

    信息

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