文章

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

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

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

题目要求

题目描述

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

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

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

输入格式

输入共 $3$ 行:

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

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

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

输出格式

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

输入输出样例 #1

输入 #1

1
2
3
6
7 5 9 10 7 4
30

输出 #1

1
4

说明/提示

数据范围:

对于 $100\%$ 的数据满足 $1≤N≤100$ 且 $0\le a_i \le 100000$。


题目分析

解题思路

  1. 读取输入数据:
    • 读取物品总数N
    • 创建数组存储N个物品的价格
    • 读取初始零花钱金额X
  2. 遍历处理每个物品:
    • 按顺序遍历每个物品
    • 判断当前零花钱是否足够购买该物品:
      • 如果钱够,购买该物品并扣除相应金额
      • 如果钱不够,跳过该物品继续往后
    • 统计购买的物品数量
  3. 输出结果:
    • 输出最终购买的物品总数

复杂度分析:

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


示例代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
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;
}

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

GESP各级别考纲要点、知识拓展和练习题目清单详见C++学习项目主页

luogu-”系列题目已加入洛谷Java、C++初学团队作业清单,可在线评测,团队名额有限,欢迎加入。

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

本文由作者按照 CC BY 4.0 进行授权