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

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

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

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

题目要求

题目描述

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

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

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

输入格式

输入共 33 行:

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

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

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

输出格式

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

输入输出样例 #1

输入 #1

6
7 5 9 10 7 4
30

输出 #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个物品的价格

{% include custom/custom-post-content-inner.html %}


示例代码

#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;
}

{% include custom/custom-post-content-footer.md %}

所有代码已上传至Github:https://github.com/lihongzheshuai/yummy-code

luogu-”系列题目可在 洛谷题库 在线评测。

bcqm-”系列题目可在 编程启蒙题库 在线评测。

GESP/CSP 认证学习微信公众号
GESP/CSP 认证学习微信公众号
Last updated on