问题描述
小R来到了一家糖果店,打算购买n种不同的糖果。每种糖果都有一个需求量,记录在数组 A 中。每种糖果的价格最初为2元,但如果某一类糖果的购买数量达到了数组 B 中所记录的打折阈值后,该类糖果的单价将降至1元。
你的任务是计算出小R购买所有糖果所需要花费的最小金额。 public class Main { public static int solution(int n, int[] A, int[] B) { int totalCost = 0; for (int i = 0; i < n; i++) { // 不打折的总花费 int costWithoutDiscount = A[i] * 2; // 打折后的总花费 int costWithDiscount = Math.min(A[i], B[i]) + Math.max(0, A[i] - B[i]) * 2; // 取较小值累加到总花费 totalCost += Math.min(costWithoutDiscount, costWithDiscount); } return totalCost; }
public static void main(String[] args) {
System.out.println(solution(4, new int[]{2, 3, 2, 1}, new int[]{1, 3, 4, 1}) == 9);
System.out.println(solution(5, new int[]{2, 2, 1, 2, 1}, new int[]{7, 8, 2, 4, 8}) == 12);
System.out.println(solution(3, new int[]{3, 4, 1}, new int[]{2, 5, 1}) == 9);
}
} 题解: 这个问题要求我们计算小R在糖果店购买糖果的最小花费。每种糖果的价格最初为2元,但当购买数量达到一个特定的阈值时,价格会降至1元。因此,我们需要针对每种糖果,比较不打折和打折后的总花费,并选择较小的一个。 以下是详细的解题步骤: 初始化总花费:我们首先将总花费设置为0,用于累加每种糖果的花费。 遍历糖果种类:我们需要对每种糖果进行遍历,以计算其总花费。 计算不打折的花费:对于每种糖果,我们首先计算其不打折的总花费,即糖果的需求量乘以2元。 计算打折后的花费:接着,我们计算打折后的总花费。这需要分两部分计算: 如果糖果的需求量小于或等于打折阈值,那么全部糖果都可以按1元购买。 如果糖果的需求量超过打折阈值,那么超过部分需要按2元购买,而达到阈值的部分按1元购买。 选择最小花费:对于每种糖果,我们比较不打折和打折后的花费,取较小的一个,并将其累加到总花费中。 返回总花费:在遍历完所有糖果后,我们返回累加的总花费,这就是小R购买所有糖果所需的最小金额。 通过这种方式,我们可以确保小R在购买糖果时花费最少的金额。代码实现中,我们使用了一个for循环来遍历每种糖果,并使用Math.min和Math.max函数来计算最小和最大值,从而确保了代码的简洁和高效。 最终,我们得到了一个解决方案,它能够正确地计算出小R购买所有糖果所需的最小金额,并通过了题目中给出的测试用例。