本篇将通过 Python 和 Cangjie 双语解决一个经典的数学问题:如何将糖果平分给小朋友。这道题目将帮助初学者通过编程理解循环与条件判断的结合使用。
candy.png
关键词
- 小学奥数
- Python + Cangjie
- 循环与条件判断
一、题目描述
老师有 N 颗糖果要平均分给 K 个小朋友。如果糖果不能整除,需要将剩余糖果顺序分配给部分小朋友,每人多拿一颗。请编写程序计算每位小朋友分到的糖果数目,并输出分配后的结果。
- 输入格式:从控制台输入两个整数 N 和 K,分别表示糖果和小朋友的数量。
- 输出格式:输出每位小朋友分到的糖果数目。如果糖果数量不足以分给所有人,输出 "糖果不够分"。
解题思路
- 基本分配:计算每位小朋友的基础糖果数量 base = N // K。
- 剩余分配:使用 N % K 计算剩余糖果数,并将这些糖果顺序分配给部分小朋友。
- 特殊情况处理:如果糖果不足以分给所有小朋友,直接输出 "糖果不够分"。
二、Python 实现
# 输入糖果和小朋友的数量
N = int(input("请输入糖果的数量: "))
K = int(input("请输入小朋友的数量: "))
# 判断糖果是否足够分配
if N < K:
print("糖果不够分")
else:
base = N // K
extra = N % K
# 输出每位小朋友的糖果数量
for i in range(1, K + 1):
if i <= extra:
print(f"第 {i} 个小朋友分到 {base + 1} 颗糖果")
else:
print(f"第 {i} 个小朋友分到 {base} 颗糖果")
三、Cangjie 实现
package cjcDemo
import std.console.*
import std.convert.*
main(): Int64 {
print("请输入糖果的数量: ")
let N: Int64 = Int64.parse(Console.stdIn.readln().getOrThrow())
print("请输入小朋友的数量: ")
let K: Int64 = Int64.parse(Console.stdIn.readln().getOrThrow())
if (N < K) {
println("糖果不够分")
} else {
let base = N / K
let extra = N % K
for (i in 1..=K) {
if (i <= extra) {
println("第 ${i} 个小朋友分到 ${base + 1} 颗糖果")
} else {
println("第 ${i} 个小朋友分到 ${base} 颗糖果")
}
}
}
return 0
}
代码详解
- 输入部分:用户输入糖果和小朋友的数量。
- 判断部分:若糖果数量不足以分给每位小朋友,直接输出 "糖果不够分"。
- 循环部分:循环遍历每位小朋友,判断是否有额外糖果要分配,并输出每人获得的数量。
四、图形展示(扩展部分)
以下为扩展内容,使用代码生成了一幅图来展示10颗糖果如何分配给3位小朋友的情况。本部分是进阶扩展内容,当前阶段不要求理解:
from PIL import Image, ImageDraw
# 创建画布
img = Image.new('RGB', (600, 300), color=(255, 255, 255))
draw = ImageDraw.Draw(img)
# 绘制标题
draw.text((10, 10), "Distribute 10 Candies to 3 Children", fill=(0, 0, 0))
# 绘制10颗糖果(彩色圆圈表示每颗糖果)
candy_colors = [(255, 0, 0), (0, 255, 0), (0, 0, 255), (255, 165, 0), (255, 255, 0),
(255, 105, 180), (138, 43, 226), (64, 224, 208), (255, 69, 0), (173, 216, 230)]
for i in range(10):
x = 50 + (i % 5) * 50 # 每行5颗糖果
y = 50 if i < 5 else 100 # 第一行和第二行的位置
draw.ellipse([x, y, x + 40, y + 40], fill=candy_colors[i], outline=(0, 0, 0))
# 标注分配情况
draw.text((10, 160), "Child 1: 4 Candies", fill=(0, 0, 0))
draw.text((10, 190), "Child 2: 3 Candies", fill=(0, 0, 0))
draw.text((10, 220), "Child 3: 3 Candies", fill=(0, 0, 0))
# 保存图像
img_path = "candy_distribution.png"
img.save(img_path)
生成的图像如下:
candy_distribution.png
五、示例执行
示例 1:
输入:
10
3
输出:
第 1 个小朋友分到 4 颗糖果
第 2 个小朋友分到 3 颗糖果
第 3 个小朋友分到 3 颗糖果
示例 2:
输入:
2
5
输出:
糖果不够分
六、小结
通过 Python 和 Cangjie 实现这道分糖果的数学题,初学者可以学习到除法运算、余数处理和循环控制的用法。这个题目帮助理解了如何将问题分解为简单的逻辑步骤来解决。