【Java|golang】860. 柠檬水找零
发布人:shili8
发布时间:2025-03-13 01:32
阅读次数:0
**柠檬水找零**
柠檬水找零是一道经典的算法题目,要求我们实现一个函数来计算给定的金额找零时需要多少个柠檬水瓶子。这个问题可以用Java或Go语言来解决。
###问题描述有两种售价分别为 $20$ 和 $30$ 的柠檬水瓶子。每瓶柠檬水的成本都是 $5$ 美元。如果我们需要找零 $100$ 美元,我们应该使用多少个 $20$ 美元和 $30$ 美元的柠檬水瓶子来实现这个金额?
### Java 解决方案#### LemonadeChange.java
javapublic class LemonadeChange { public int[] lemonadeChange(int k) { // 初始化变量,记录5、10 和20 的数量 int five =0, ten =0, twenty =0; // 将金额转换为元 k /=5; while (k >0) { if (twenty >0 && k >=25) { // 如果有足够的20元,直接减去 twenty--; k -=25; } else if (ten >0 && k >=15) { // 如果有足够的10元,减去10元 ten--; k -=15; } else if (five >0 && k >=5) { // 如果有足够的5元,直接减去 five--; k -=5; } // 如果金额为零,则跳出循环 if (k ==0) break; } return new int[]{five, ten, twenty}; } public static void main(String[] args) { LemonadeChange solution = new LemonadeChange(); int[] result = solution.lemonadeChange(100); System.out.println("五元硬币数量:" + result[0]); System.out.println("十元硬币数量:" + result[1]); System.out.println("二十元硬币数量:" + result[2]); } }
### Go 解决方案#### lemonade_change.go
gopackage mainimport "fmt" func lemonadeChange(k int) []int { // 初始化变量,记录5、10 和20 的数量 five, ten, twenty :=0,0,0 // 将金额转换为元 k /=5 for ; k >0; { if twenty >0 && k >=25 { // 如果有足够的20元,直接减去 twenty-- k -=25 } else if ten >0 && k >=15 { // 如果有足够的10元,减去10元 ten-- k -=15 } else if five >0 && k >=5 { // 如果有足够的5元,直接减去 five-- k -=5 } // 如果金额为零,则跳出循环 if k ==0 break } return []int{five, ten, twenty} } func main() { solution := lemonadeChange(100) fmt.Println("五元硬币数量:" + strconv.Itoa(solution[0])) fmt.Println("十元硬币数量:" + strconv.Itoa(solution[1])) fmt.Println("二十元硬币数量:" + strconv.Itoa(solution[2])) }
###代码注释* 在 Java 和 Go 解决方案中,我们分别使用 `int[]` 和 `[]int` 来表示找零所需的柠檬水瓶子的数量。
* 我们首先将金额转换为元,以便更容易地进行计算。
* 然后,我们进入一个循环,直到金额为零。每次迭代中,我们检查是否有足够的20、10 或5 的柠檬水瓶子来实现当前金额。如果有,则减去相应数量的柠檬水瓶子。
* 最后,我们返回找零所需的柠檬水瓶子的数量。
### 示例假设我们需要找零 $100 美元。我们可以使用上述解决方案来计算找零所需的柠檬水瓶子的数量。
在 Java 解决方案中,输出结果为:
五元硬币数量:0十元硬币数量:2二十元硬币数量:1
这意味着我们需要2 个 $10 的柠檬水瓶子和1 个 $20 的柠檬水瓶子来实现找零 $100 美元。
在 Go 解决方案中,输出结果为:
五元硬币数量:0十元硬币数量:2二十元硬币数量:1
这与 Java 解决方案的输出结果相同。