题解:洛谷 B4034 小杨购物
【题目来源】
洛谷:B4034 [GESP202409 一级] 小杨购物 - 洛谷
【题目描述】
小杨有\(n\)元钱用于购物。商品\(A\)的单价是\(a\)元,商品\(B\)的单价是\(b\)元。小杨想购买相同数量的商品\(A\)和商品\(B\)。请你编写程序帮小杨计算出他最多能够购买多少个商品\(A\)和商品\(B\)。
【输入】
第一行包含一个正整数\(n\),代表小杨用于购物的钱的金额。
第二行包含一个正整数\(a\),代表商品\(A\)的单价。
第三行包含一个正整数\(b\),代表商品品\(B\)的单价。
【输出】
输出一行,包含一个整数,代表小杨最多能够购买的商品\(A\)和商品品\(B\)的数量。
【输入样例】
12
1
2
【输出样例】
4
【核心思想】
-
问题分析:小杨有 \(n\) 元钱,商品 \(A\) 单价 \(a\) 元,商品 \(B\) 单价 \(b\) 元,要求购买相同数量的 \(A\) 和 \(B\)。每组(1个 \(A\) + 1个 \(B\))花费 \(a + b\) 元,求最多能买多少组。这是一个整数除法问题,核心在于计算总钱数能覆盖多少组商品。
-
算法选择:
- 直接整数除法:\(n / (a + b)\) 即为最多能购买的组数
-
关键步骤:
- 读入数据:读取 \(n, a, b\)
- 计算答案:\(ans = n / (a + b)\)
- 输出结果:\(ans\)
-
时间/空间复杂度:
- 时间复杂度:\(O(1)\)
- 空间复杂度:\(O(1)\)
-
整数除法的核心思想:
- 分组思想:将"相同数量的 \(A\) 和 \(B\)"转化为"每组包含 1个 \(A\) 和 1个 \(B\)",每组成本固定为 \(a + b\),问题简化为总预算能覆盖多少完整组
- 向下取整特性:整数除法自动实现向下取整,剩余不足一组的钱无法购买,符合"最多"的要求
- 题目保证的隐含条件:题目未明确说明 \(a + b \leq n\),但输入数据保证有解(至少能买 0 组)
- 适用于基础资源分配、等量配对购买类入门问题
【算法标签】
入门 #语法基础
【代码详解】
#include <bits/stdc++.h>
using namespace std;
int n, a, b; // n: 总距离, a: 前进距离, b: 后退距离
int main()
{
// 输入:总距离n,一次前进距离a,一次后退距离b
cin >> n >> a >> b;
// 计算前进次数
cout << n / (a + b) << endl;
return 0;
}
【运行结果】
12
1
2
4
浙公网安备 33010602011771号