1. 问题背景与需求分析
今天想和大家分享一道来自牛客网的经典算法题——"清楚姐姐买竹鼠"。这道题看似简单,但蕴含着典型的贪心算法思想,非常适合用来训练编程思维。题目描述的是:我们需要购买至少x只竹鼠,有两种购买方式:
- 单只购买:每只价格a元
- 批量购买:三只一组,每组价格b元
我们的目标是计算出购买x只竹鼠所需的最低总成本。这类问题在实际生活中很常见,比如电商平台的满减优惠、批发市场的打包折扣等场景,都需要我们做出最优的购买决策。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 解题思路详解
2.1 核心算法选择
这道题最适合采用贪心算法(Greedy Algorithm)来解决。贪心算法的基本思想是:在每一步选择中都采取当前状态下最优的选择,从而希望导致全局最优的结果。
具体到本题,我们需要在两种购买方式中做出选择:
- 当3a ≤ b时:单买三只的总价不高于批量购买价,此时全部单买更划算
- 当3a > b时:批量购买更优惠,应优先采用三只一组的购买方式
2.2 边界情况考虑
在实际编码时,我们需要特别注意几个边界情况:
- 当x不是3的倍数时,剩余1-2只需要单独考虑
- 比较剩余部分单买和再买一组的价格
- 处理大数情况,使用long类型避免溢出
3. Java代码实现与解析
3.1 完整代码展示
java复制import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
long a = in.nextLong(); // 单只价格
long b = in.nextLong(); // 三只价格
long x = in.nextLong(); // 需要购买的数量
if (3 * a <= b) {
// 全部单买更划算
System.out.print(x * a);
} else {
long ans = 0;
//
