OneCoder Avatar
OneCodercoderli.com · 957 篇博文
三级

C++ 算法考级专栏

真题分析、矩阵探测、递归回溯与基础语法

🎨 视觉封面

【GESP】C++三级模拟题 luogu-B3848 [GESP样题 三级] 逛商场

📅 2025-05-05·✍️ OneCoder·计算中...·⏱️ 4 分钟
#GESP#C++#一维数组

GESP三级模拟样题,一维数组相关,难度★★✮☆☆。

luogu-B3848 [GESP样题 三级] 逛商场

题目要求

题目描述

小明是个不太有计划的孩子。这不,刚到手的零花钱,就全部拿着逛商场去了。

小明的原则很简单,见到想买的物品,只要能买得起,就一定会买下来之后才会继续往前走;如果买不起就直接跳过。

一天下来,小明到底买了多少物品呢?

输入格式

输入共 33 行:

第一行是一个整数 NN,表示商场中共有 NN 种小明想买的物品(1N1001≤N≤100);

第二行共有 NN 个整数,分别表示小明先后见到想买的物品的价格;

第三行是一个整数 XX,表示开始时小明共有 XX 元零花钱。

输出格式

输出 11 行,包含一个整数,表示小明买到的物品数。

输入输出样例 #1

输入 #1

CONSOLE 3 行
6
7 5 9 10 7 4
30

输出 #1

CONSOLE 1 行
4

说明/提示

数据范围:

对于 100%100\% 的数据满足 1N1001≤N≤1000ai1000000\le a_i \le 100000


题目分析

解题思路

  1. 读取输入数据:

    • 读取物品总数N
    • 创建数组存储N个物品的价格
    • 读取初始零花钱金额X
  2. 遍历处理每个物品:

    • 按顺序遍历每个物品
    • 判断当前零花钱是否足够购买该物品:
      • 如果钱够,购买该物品并扣除相应金额
      • 如果钱不够,跳过该物品继续往后
    • 统计购买的物品数量
  3. 输出结果:

    • 输出最终购买的物品总数

复杂度分析:

  • 时间复杂度:O(N)O(N),需要遍历一遍所有物品
  • 空间复杂度:O(N)O(N),需要存储N个物品的价格

示例代码

C++ 31 行
#include <iostream>

int main() {
    // 读取物品数量
    int n;
    std::cin >> n;

    // 创建数组存储物品价格
    int ary[n];
    for (int i = 0; i < n; i++) {
        std::cin >> ary[i];
    }

    // 读取初始零花钱金额
    int money;
    std::cin >> money;

    // 统计可以购买的物品数量
    int count = 0;
    for (int i = 0; i < n; i++) {
        // 如果当前金额足够购买物品
        if (money >= ary[i]) {
            count++;  // 购买数量加1
            money -= ary[i];  // 扣除物品价格
        }
    }

    // 输出购买的物品总数
    std::cout << count;
    return 0;
}

💡 OneCoder 资源指引

所有代码开源上传至 GitHub:yummy-code 仓库 · GESP 专题站:GESP WIKI

🤝 技术交流与答疑

欢迎加入:C++ GESP/CSP 考级答疑群(688906745)Java/Python交流群(982860385),点击可直接加群。

📚

猜你想读 · 相关文章推荐

OneCoder

OneCoder (lihongzheshuai)

一个中年人的自留地,记录学习 C++、GESP/NOI、Java、Python 与算法架构的心得体会。本站唯一网址:coderli.com

读者讨论与留言

0 条讨论
✨ 支持点击留言直接回复 · Markdown 引用格式
💬 还没有读者留言,快来成为第一个讨论者吧!