B4034 [GESP202409 一级] 小杨购物

· · 题解

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

本题有两种思路。

:::align{center} :::

思路 1:数学法

想购买相同数量的商品 A 和商品 B,可以把一个 A 商品和一个 B 商品打包为一个C 商品,其价值是 a+b。所求解的问题变成能够购买多少个商品 C,答案自然就是 \dfrac{n}{a+b} 向下取整的值。在 C++ 中,正整数除法的答案直接向下取整。

因此代码可以编写为(只展示关键代码):

int n,a,b;
cin >> n >> a >> b;
cout << n / (a + b);

思路 2:循环枚举法

如果没有想到打包,也不要紧。题目问最多能够购买多少个商品,我们可以使用计算机强大的计算能力逐一尝试。我们使用循环,让循环变量 i0,1,2,3\dots 逐一尝试,所用的金额是 i\times a+i\times b,与小杨拥有的金额 n 做比较,如果大于 n 就结束循环,输出 i-1 即可。

因此代码可以编写为(只展示关键代码):

int n, a, b, i;
cin >> n >> a >> b;
for (i = 0; a * i + b * i <= n; i++);
// 让循环变量 i 从 0,1,2,... 进行尝试,如果金额(a * i + b * i)大于了 n,会退出循环。
cout << i - 1;