《B3836 [GESP202303 二级] 百鸡问题》

题目背景

对应的选择、判断题:https://ti.luogu.com.cn/problemset/1122

题目描述

"百鸡问题"是出自我国古代《张丘建算经》的著名数学问题。大意为:

"每只公鸡 5 元,每只母鸡 3 元,每 3 只小鸡 1 元;现在有 100 元,买了 100 只鸡,共有多少种方案?"

小明很喜欢这个故事,他决定对这个问题进行扩展,并使用编程解决:如果每只公鸡 x 元,每只母鸡 y 元,每 z 只小鸡 1 元;现在有 n 元,买了 m 只鸡,共有多少种方案?

输入格式

输入一行,包含五个整数,分别为问题描述中的 x,y,z,n,m。约定 1≤x,y,z≤10,1≤n,m≤1000。

输出格式

输出一行,包含一个整数 C,表示有 C 种方案。

输入输出样例

输入 #1复制

复制代码
5 3 3 100 100

输出 #1复制

复制代码
4

输入 #2复制

复制代码
1 1 1 100 100

输出 #2复制

复制代码
5151

说明/提示

【样例 1 解释】

这就是问题描述中的"百鸡问题"。4 种方案分别为:

  • 公鸡 0 只、母鸡 25 只、小鸡 75 只。
  • 公鸡 4 只、母鸡 18 只、小鸡 78 只。
  • 公鸡 8 只、母鸡 11 只、小鸡 81 只。
  • 公鸡 12 只、母鸡 4 只、小鸡 84 只。

代码实现:

cpp 复制代码
#include <iostream>
using namespace std;

int main() {
    int x, y, z, n, m;
    cin >> x >> y >> z;
    cin >> n >> m;

    int cnt = 0;

    for (int i = 0; i <= m; i++) {
        for (int j = 0; j <= m - i; j++) {
            int k = m - i - j; 
            if (k < 0 || k % z != 0) continue;

            int cost = i * x + j * y + (k / z);
            if (cost == n) {
                cnt++;
            }
        }
    }

    cout << cnt << endl;
    return 0;
}