B3836 [GESP202303 二级] 百鸡问题

· · 题解

欢迎大家报名洛谷网校的课程,期待和大家一起进步!

:::align{center} :::

思路分析

要解决本问题,可以使用暴力枚举的方法。因总数 m 是已知的,我们可以使用双重循环枚举每一种可能,最外层假设公鸡的数量为 i 只,从 0 枚举到 m ,对于每一个公鸡数量,内层循环假设母鸡的数量为 j 只(保证公鸡和母鸡总数不超过 m ),则小鸡的数量为 m-i-j,并确保它是 z 的整数倍。

检查方案是否有效:对于每一种公鸡、母鸡和小鸡的数量组合,检查它们的价格之和是否等于给定的总金额 n。如果满足条件,则用 ans 记录下这个购买方案。

遍历并验证所有可能的组合后,统计出满足条件的方案数量。

核心代码

for (int i = 0; i <= m; i++)
{
    for (int j = 0; j <= m - i; j++)
    {
        if ( x * i + j * y + (m - i - j) / z == n && (m - i - j) % z == 0) ans++;
    }
}