分析问题
小明需要花光n元购买至少一件面包和蛋挞,其中面包每件x元,蛋挞每件y元。目标是找到购买方案中面包数量最多的方案,并输出对应的面包和蛋挞数量。
建立模型
- 变量定义:设购买的面包数量为a,蛋挞数量为b。根据题意,满足:
a* x + b *y = n (a>1,b>1) - 目标:最大化a的值。
- 求解思路:
- 从可能的最大a值开始遍历,即当b=1时,此时a的最大值为 a = (n-by) / x
- 对每个a,检查剩余金额是否能被y整除,并确保b≥1。若满足条件,则为最优解。
输入n, x, y
计算a_max = (n - y) / x
从a_max递减到1遍历每个a:
计算剩余金额remain = n - a * x
若rem >= y且remain 是y的倍数:
输出a和rem / y
结束程序
编写程序
#include <iostream>
using namespace std;
int main() {
int n, x, y;
cin >> n >> x >> y;
int a_max = (n - y) / x;
for (int a = a_max; a >= 1; --a) {
int remain = n - a * x;
if (remain >= y && remain % y == 0) {
int b = remain / y;
cout << a << " " << b << endl;
return 0;
}
}
return 0;
}
代码解释:
- 读取输入的总金额n、面包单价x和蛋挞单价y。
- 计算可能的最大面包数量a_max。
- 从a_max开始递减遍历,检查每个a对应的剩余金额是否能被y整除,并确保b≥1。
- 找到第一个符合条件的解即为最优解,输出后结束程序。