
公鸡 5元 1 只,母鸡 3 元 1 只,小鸡 3 只 1 元。用 100 元买 100 只鸡,请问公鸡、母鸡、小鸡可以各买多少只?
# 枚举公鸡数量:0到20只for x in range(0, 21):# 枚举母鸡数量:0到33只for y in range(0, 34):# 计算小鸡数量z = 100 - x - y# 检查总钱数是否为100文,小鸡数量必须是3的倍数if 5*x + 3*y + z/3 == 100 and z % 3 == 0:print(f"公鸡{x}只,母鸡{y}只,小鸡{z}只")
找出 100-999 之间所有的 “水仙花数”。
水仙花数是指一个三位数,它的每个位上的数字的立方和,等于它本身。比如 153=1x1x1+5x5x5+3x3x3,就是水仙花数。
# 枚举所有三位数for i in range(100, 1000):# 拆分百位、十位、个位b = i // 100 # 百位:整除100s = i // 10 % 10 # 十位:先整除10,再取余10g = i % 10 # 个位:取余10# 判断是否为水仙花数 (立方用幂运算符)if b**3 + s**3 + g**3 == num:print(f"{i}是水仙花数")
大家围成一圈,从 1 开始依次报数,报到 3 的倍数、或者数字里带 3 的,就喊 “过”,否则喊数字
请输出 1-50 的完整报数结果
# 模拟1到50的报数for x in range(1, 51):# 判断是否要喊“过”:是3的倍数 或者 数字里包含3if x % 3 == 0 or "3" in str(x):print("过")else:print(x)
📚案例 :蜗牛爬井问题(小学奥数经典)
一只蜗牛从 10 米深的井底往上爬,白天往上爬 4 米,晚上往下滑 2 米。请问蜗牛第几天能爬出井口?
zm = 10 # 井深10米day = 0 # 天数m = 0 # 蜗牛当前高度# 模拟爬井过程while True:day += 1 # 新的一天开始# 白天往上爬4米m += 4# 判断是否爬出井口if m >= zm:print(f"蜗牛第{day}天爬出了井口!")break# 没爬出,晚上下滑2米m -= 2
超市找零钱,有 1 元、5 元、10 元、20 元的纸币,
现在要找给顾客 36 元,请问最少需要几张纸币?
贪心策略:
每次都选不超过剩余金额的最大面额纸币
直到找完所有金额,这样能保证纸币张数最少
🖥️代码
# 纸币面额,从大到小排序q = [20, 10, 5, 1]# 要找的总金额y = 36# 纸币张数count = 0# 贪心找零for i in q:# 只要当前面额小于等于剩余金额,就用这个面额while y >= i:y -= icount += 1print(f"最少需要{count}张纸币")
学校有 4 个兴趣活动,时间分别是
1-2 点、2-3 点、1-3 点、3-4 点
你最多能参加几个不冲突的活动?
贪心策略:
每次都选结束时间最早的活动,这样能留出最多的时间参加后面的活动
最终能参加的活动数量就是最多的了
🖥️代码
# 活动列表:(开始时间, 结束时间)hd = [(1, 2), (2, 3), (1, 3), (3, 4)]# 按结束时间从小到大排序hd.sort(key=lambda x: x[1])count = 0 # 参加的活动数量js = 0 # 上一个活动的结束时间# 贪心选择活动for x in hd:start, end = x# 当前活动开始时间 >= 上一个活动结束时间,不冲突if start >= js:count += 1js = endprint(f"参加了{start}-{end}点的活动")print(f"最多能参加{count}个活动")
