top1编程
← 返回题目
题解

购物节

1 条题解

  • 0
    @ 2026-8-4 10:17:30

    解题思路

    优惠后单本 x-1 元、十本装 y-1 元。要买 n 个本子,最少花多少钱。

    因为十本装可能更划算(也可能多买几个整十更划算),可以枚举买多少套十本装:从 0 套到 n/10+1 套,剩下的本子用单本补足(够了就补 0),每种方案算一次总价,取最小的。

    参考代码

    #include <iostream>
    using namespace std;
    
    int main() {
        int x, y, n;
        cin >> x >> y >> n;
        // 优惠后:单本 x-1 元,十本装 y-1 元
        int ans = 2147483647;
        // 枚举买 k 套十本装,剩下的用单本补足
        for (int k = 0; k <= n / 10 + 1; k++) {
            int have = k * 10;             // 十本装给的本子数
            int need = n - have;           // 还缺几个
            if (need < 0) need = 0;        // 够了就不用再买
            int cost = k * (y - 1) + need * (x - 1);
            if (cost < ans) ans = cost;
        }
        cout << ans << endl;
        return 0;
    }
    

    复杂度分析

    枚举的套数不超过 n/10+1 次,n 最大 100,时间复杂度 O(n/10),额外空间复杂度 O(1)。

    • 1