【题目链接】
一本通 4004 百鸡问题
洛谷 B3837 百鸡问题
【题目考点】
1. 循环结构(嵌套); 2. 枚举法;
【解题逻辑】
1. 明确约束条件:
- 总金额为 n 元,总购买数量为 m 只鸡;
- 公鸡单价 x 元 / 只,母鸡单价 y 元 / 只,
- z 只小鸡 1 元(即小鸡单价为 1/z 元 / 只,且小鸡数量必须是 z 的整数倍);
2. 枚举法穷举所有可能的购买组合:
- 先枚举公鸡的购买数量 a(范围:0~m,因最多买 m 只鸡);
- 再枚举母鸡的购买数量 b(范围:0~m-a,保证公鸡 + 母鸡数量不超过 m);
- 小鸡数量 c 由总数量得知:c = m – a – b(保证 a+b+c=m);
3. 验证组合是否符合要求:
- 购买的组合总价需要等于n元 ;
- 小鸡的数量必须是z的倍数(满足z只1元的计价);
【题解代码】
1. 输入 5 个整数,分别表示:公鸡单价 x 元、母鸡单价 y 元、z 只小鸡 1 元、总金额 n 元、总购买数量 m 只;
int x,y,z,n,m;
cin>>x>>y>>z>>n>>m;// 共n元,买m只鸡
2.定义变量记录合法购买方案数,初始化为 0;
int ans=0;// 方案数
3. 枚举公鸡、母鸡的可购买数量
// 先枚举公鸡可够买数量(最少买0只,最多买m只)
for(int a=0;a<=m;a++){
// 当公鸡买了a只,枚举母鸡的可购买数量(最少买0只,最多买m-a只)
for(int b=0;b<=m-a;b++){
// 当母鸡买了b只,小鸡的数量 = 总数 – 公鸡数 – 母鸡数
int c=m-a-b;
// 验证当前组合的价格是否等于n元,小鸡的数量也必须是z的倍数
if(a*x+b*y+c/z==n && c%z==0){
ans++;
}
}
}
4. 输出方案数
cout<<ans;





