#128. 百钱买百鸡

百钱买百鸡

说明

这是一个源自中国古代《算经》的经典问题:

  • 公鸡每只 5 文钱
  • 母鸡每只 3 文钱
  • 小鸡 1 文钱可以买 3 只

现在要用 m 文钱恰好买 m 只鸡(即钱数和鸡的总数相等),问公鸡、母鸡、小鸡各买几只?

请你输出所有可能的方案

输入格式

一行,一个整数 m(1m2001 \le m \le 200),表示钱数和目标鸡的总数。

输出格式

对于每一种合法方案,输出一行三个整数,分别表示公鸡数、母鸡数、小鸡数,用空格隔开。

如果存在多种方案,按公鸡数从小到大输出;公鸡数相同时按母鸡数从小到大输出。

如果不存在任何方案,输出 No solution

100
0 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 只,缩小循环上界。