题解:洛谷 B4034 小杨购物

【题目来源】

洛谷:B4034 [GESP202409 一级] 小杨购物 - 洛谷

【题目描述】

小杨有\(n\)元钱用于购物。商品\(A\)的单价是\(a\)元,商品\(B\)的单价是\(b\)元。小杨想购买相同数量的商品\(A\)和商品\(B\)。请你编写程序帮小杨计算出他最多能够购买多少个商品\(A\)和商品\(B\)

【输入】

第一行包含一个正整数\(n\),代表小杨用于购物的钱的金额。

第二行包含一个正整数\(a\),代表商品\(A\)的单价。

第三行包含一个正整数\(b\),代表商品品\(B\)的单价。

【输出】

输出一行,包含一个整数,代表小杨最多能够购买的商品\(A\)和商品品\(B\)的数量。

【输入样例】

12
1
2

【输出样例】

4

【核心思想】

  1. 问题分析:小杨有 \(n\) 元钱,商品 \(A\) 单价 \(a\) 元,商品 \(B\) 单价 \(b\) 元,要求购买相同数量的 \(A\)\(B\)。每组(1个 \(A\) + 1个 \(B\))花费 \(a + b\) 元,求最多能买多少组。这是一个整数除法问题,核心在于计算总钱数能覆盖多少组商品。

  2. 算法选择

    • 直接整数除法\(n / (a + b)\) 即为最多能购买的组数
  3. 关键步骤

    • 读入数据:读取 \(n, a, b\)
    • 计算答案\(ans = n / (a + b)\)
    • 输出结果\(ans\)
  4. 时间/空间复杂度

    • 时间复杂度:\(O(1)\)
    • 空间复杂度:\(O(1)\)
  5. 整数除法的核心思想

    • 分组思想:将"相同数量的 \(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
posted @ 2026-07-16 16:27  团爸讲算法  阅读(68)  评论(0)    收藏  举报