B3836 [GESP202303 二级] 百鸡问题

题目描述

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

“每只公鸡 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

输入 #1

5 3 3 100 100

输出 #1

4

输入输出样例 #2

输入 #2

1 1 1 100 100

输出 #2

5151

说明/提示

【样例 1 解释】

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

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

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

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

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

答案:

#include <iostream>
using namespace std;
int main() {int x, y, z, n, m, cnt = 0;cin >> x >> y >> z >> n >> m;for (int gj = 0; gj * x <= n && gj <= m; gj++){gj*y+gj*x;for (int mj = 0; mj * y + gj * x <= n && mj + gj <= m; mj++) {int xj = (n- gj * x- mj * y) * z;if (gj + mj + xj == m)cnt++;}}cout << cnt << endl;return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/961772.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!