买糕点

分析问题

小明需要花光n元购买至少一件面包和蛋挞,其中面包每件x元,蛋挞每件y元。目标是找到购买方案中面包数量最多的方案,并输出对应的面包和蛋挞数量。

建立模型

  1. 变量定义:设购买的面包数量为a,蛋挞数量为b。根据题意,满足:
    a* x + b *y = n (a>1,b>1)
  2. 目标:最大化a的值。
  3. 求解思路
  • 从可能的最大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。
  • 找到第一个符合条件的解即为最优解,输出后结束程序。

保存 编译 运行