首页 > 试题广场 >

清楚姐姐买竹鼠

[编程题]清楚姐姐买竹鼠
  • 热度指数:6039 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
\hspace{15pt}清楚姐姐途经山村,遇到一家售卖竹鼠的商铺:
\hspace{23pt}\bullet\, 花费 a 元可购买 1 只竹鼠;
\hspace{23pt}\bullet\, 花费 b 元可购买 3 只竹鼠。

\hspace{15pt}给定 a,b,x,求买到至少 x 只竹鼠所需的最小花费。

输入描述:
\hspace{15pt}在一行上输入三个整数 a,b,x\left(1\leqq a,b,x\leqq 10^9\right)


输出描述:
\hspace{15pt}输出一个整数,表示最少需花费的金额。
示例1

输入

4 10 10

输出

34

说明

\,\,\,\,\,\,\,\,\,\,花费 3\times b = 30 元买 9 只竹鼠,再花费 1\times a = 4 元买 1 只竹鼠,共花费 34 元。我们可以证明,没有更优的购买方式。
我觉得应该直接比较单价。
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int a = in.nextInt();
        int b = in.nextInt();
        int x = in.nextInt();

        if(b/3 < a){
        int y = x %3;
        int z = (x-y)/3;
        int re = z*b + a;
        System.out.println(re);
        }else{
        System.out.println(a*x);
        }
    }
}

发表于 2025-09-28 15:27:50 回复(0)
import java.util.*;
import java.io.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) throws IOException {
        long a = ad(); // a元买1只
        long b = ad(); // b元买3只
        long x = ad(); // x只
        // 如果3a>b,说明你卖的东西贵了

        // ans = (x % 3) * a + (x / 3) * b;
        long ans = 0;
        // 9 + 1
        if (a >= b) { // 用b买划算
            if (x % 3 == 0) { // 特判 %1和%2的情况
                ans = (x / 3) * b;
            } else {
                ans = (x / 3 + 1) * b;
            }
        } else if (3 * a < b) { // 用a划算
            ans = x * a;
        } else { // a和b自由组合
            ans = (x % 3) * a + (x / 3) * b;
        }
        System.out.println(ans);

    }

    static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    static StreamTokenizer st = new StreamTokenizer(br);
    static long ad() throws IOException {
        st.nextToken();
        return (long) st.nval;
    }
}

发表于 2025-09-08 15:56:53 回复(0)
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        long a = scanner.nextLong();  // 1只竹鼠的价格
        long b = scanner.nextLong();  // 3只竹鼠的价格
        long x = scanner.nextLong();  // 需要的竹鼠数量
        
        // 计算3只一组的单价是否比单只购买更划算
        // 如果3只的价格比单买3只便宜,则优先考虑3只一组的购买方式
        if (b < 3 * a) {
            // 计算需要多少组3只
            long groups = x / 3;
            // 计算剩余不足3只的数量
            long remainder = x % 3;
            
            // 总花费 = 组数*每组价格 + 剩余数量的最小花费
            // 剩余数量的花费可以选择单买,或者再买一组3只(可能更便宜)
            long cost = groups * b + Math.min(remainder * a, b);
            System.out.println(cost);
        } else {
            // 如果3只一组不划算,全部单买
            System.out.println(x * a);
        }
    }
}
    

发表于 2025-09-03 14:10:02 回复(0)
import java.util.*;
import java.io.*;

// 能买三只时,计算a,b两种策略买三只花费选最小的
// 不能买三只时,选取a策略购买和b策略最小值,选b时多买几只也没事儿,因为题目有至少
public class Main {
    public static void main(String[] args) throws IOException {

        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
        String[] line = bf.readLine().split(" ");
        long a = Integer.parseInt(line[0]);//a*3会超过int范围,所以a用long
        int b = Integer.parseInt(line[1]);
        int x = Integer.parseInt(line[2]);

        long sumMin = 0;//花费用long
        while (x >0) {
            if (x >= 3) {
                sumMin += Math.min(a * 3, b);
            } else {
                sumMin += Math.min(a*x, b);
            }
            x-=3;
        }
        System.out.println(sumMin);
    }
}

发表于 2025-09-02 11:05:11 回复(0)
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 ( b / 3 < a) {
            long cost = x % 3;
            if (cost == 0) {
                System.out.println((x / 3) * b);
            } else if (cost * a < b){
                System.out.println((x / 3) * b + cost * a);
            }else {
                System.out.println((x / 3) * b + b);
            }
        } else {
            System.out.println(a * x);
        }
    }

发表于 2025-08-26 15:33:58 回复(0)