#128. 百钱买百鸡
百钱买百鸡
说明
这是一个源自中国古代《算经》的经典问题:
- 公鸡每只 5 文钱
- 母鸡每只 3 文钱
- 小鸡 1 文钱可以买 3 只
现在要用 m 文钱恰好买 m 只鸡(即钱数和鸡的总数相等),问公鸡、母鸡、小鸡各买几只?
请你输出所有可能的方案。
输入格式
一行,一个整数 m(),表示钱数和目标鸡的总数。
输出格式
对于每一种合法方案,输出一行三个整数,分别表示公鸡数、母鸡数、小鸡数,用空格隔开。
如果存在多种方案,按公鸡数从小到大输出;公鸡数相同时按母鸡数从小到大输出。
如果不存在任何方案,输出 No solution。
1000 25 75
4 18 78
8 11 81
12 4 84
</p>
提示
设公鸡 a 只、母鸡 b 只、小鸡 c 只,满足:- a + b + c = m(鸡的总数)
- 5a + 3b + c/3 = m(总钱数)
- c 必须是 3 的倍数
思路:用二重循环枚举 a 和 b,则 c = m - a - b,检查钱数等式和 c \ge 0 且 c 是 3 的倍数即可。
优化:公鸡最多 m/5 只,母鸡最多 m/3 只,缩小循环上界。