📚 适合人群:Python初学者、循环嵌套基础练习题、小学生编程作业
💡 核心考点:多重for循环、枚举思想、条件判断、组合计数
一、题目描述
小华拿着 n 元钱 去糖果店买糖,店里只有三种糖果:
🍭 棒棒糖:5 元/根
🍫 巧克力:8 元/块
🍮 果冻糖:10 元/颗
要求:恰好花完所有的钱,可以只买一种、或多种任意搭配。
我们需要统计出:一共有多少种合法的「完美购买方案」。
题目示例
当 n = 20 时,一共有3 种方案:
4 根棒棒糖:5 × 4 = 20
2 根棒棒糖 + 1 颗果冻糖:5 × 2 + 10 × 1 = 20
2 颗果冻糖:10 × 2 = 20
二、解题思路(超易懂)
这是一道经典的枚举题,核心思路:
把所有「可能购买的糖果数量」全部试一遍,满足条件就计数 +1。
设:
x = 棒棒糖数量
y = 巧克力数量
z = 果冻糖数量
只要满足公式:5x + 8y + 10z = 总钱数 n
就是合法的完美方案。
三、完整正确代码
本次只保留三层循环原版写法,最贴合初学逻辑。
# 定义三种糖果的单价a = 5b = 8c = 10# 输入总金额n = int(input())# 统计方案数量count = 0# 遍历所有可能的棒棒糖数量for x in range(n // a + 1):# 遍历所有可能的巧克力数量for y in range(n // b + 1):# 遍历所有可能的果冻糖数量for z in range(n // c + 1):# 判断是否恰好花完所有钱if 5 * x + 8 * y + 10 * z == n:count += 1# 输出总方案数print(count)
四、逐行代码详解
1. 定义单价
用变量存储价格,代码更清晰,方便修改和阅读。
2. 循环范围 n // 单价 + 1
n // a 代表该糖果最多能买多少个。
末尾 +1 是关键:因为 range 取不到右边界,必须加1才能包含「买0个、买最大数量」的情况。
3. 三层循环枚举
把 x、y、z 的所有组合全部遍历一遍,不遗漏任何搭配方案。
4. 条件判断计数
只要总价刚好等于手里的钱,说明是完美方案,计数器加一。
五、新手高频易错点
易错1:忘记 +1:会漏掉买0个、买最大数量的方案,答案偏小
易错2:不允许买0个:题目允许只买一种糖果,数量可以为0
六、总结
✅ 本题核心:枚举所有组合,筛选合法方案
✅ 三层循环写法逻辑直观,零基础完全能看懂.
✅ 只要掌握「遍历+判断+计数」,就能搞定所有同类搭配计算题!
持续打卡基础题,轻松吃透 Python 循环!