1 条题解
-
0
思路与算法
枚举公鸡a从0至20、母鸡b从0至33,用总数量得到小鸡c=100-a-b。检查c非负、能被3整除,且5a+3b+c/3=100,满足时按a、b递增顺序输出。
正确性说明
公鸡和母鸡的上界来自预算,所有可行方案都在枚举范围内。由总只数确定c后,钱数和数量两条约束全部检查,因此输出恰好是所有解。枚举顺序使公鸡数从小到大;当a固定时方程唯一确定b,满足要求顺序。独立答案使用乘3后的整数方程15a+9b+c=300。
复杂度
21×34次候选、常量运算,固定题时间O(1)、空间O(1),初始化O(1)。推广预算上界B时朴素枚举O(B²),但本题所有范围为常量。
易错点
允许某种鸡为0,不能擅自要求全部为正。小鸡3只1钱,不是每只1钱。库内P0239鸡价3/2且含中文标题、固定宽度,G2001输入价格并只输出方案数,都与本题不同。
参考代码(C++11)
#include <bits/stdc++.h> using namespace std; int main() { for (int a = 0; a <= 20; ++a) for (int b = 0; b <= 33; ++b) { int c = 100 - a - b; if (c >= 0 && c % 3 == 0 && 5 * a + 3 * b + c / 3 == 100) cout << a << " " << b << " " << c << "\n"; } }
- 1