当前位置: 首页 > news >正文

查找成绩(向量实现)

题目描述

# T432283 05-30-B01-查找成绩(向量实现)(L4)

## 题目描述

输入一组成绩,共n个,这n个成绩的序号为1~n。再查找成绩a,输出每个成绩a的位置。要求用向量实现。

注意,本题需要用向量的find()函数,find()函数返回的不是元素的下标,而是元素的迭代器。

## 输入格式

输入数据第一行为正整数n,n≤100。第二行有n个整数,范围为0~100,用空格隔开。第三行有一个成绩a,范围为0~100。

## 输出格式

输出成绩a的每个位置,用空格隔开。如果查找不到成绩a,输出no。

## 输入输出样例 #1

### 输入 #1

```
8
90 88 85 88 88 98 95 100
88
```

### 输出 #1

```
2 4 5
```

## 输入输出样例 #2

### 输入 #2

```
8
90 88 85 88 88 98 95 100
99
```

### 输出 #2

```
no
```

## 说明/提示

### 本题出处
本题源自以下教材的编程习题:王桂平, 周祖松, 穆云波, 葛昌威编著. C++趣味编程及算法入门. 北京大学出版社, 2024年出版.

一、题目分析

题目要求输入n个成绩,用向量(vector)存储,然后查找目标成绩a,输出所有a对应的位置(位置从 1 开始)。若未找到,输出no。核心要求是必须使用向量的find()函数,且需注意find()返回的是迭代器而非下标。

二、核心知识点

  1. 向量(vector:动态数组,可存储多个同类型元素,支持下标访问和迭代器操作。
  2. find()函数:位于<algorithm>头文件中,用于在容器中查找指定元素。
    • 语法:find(开始迭代器, 结束迭代器, 目标值)
    • 返回值:若找到,返回指向该元素的迭代器;若未找到,返回结束迭代器(如vector.end())。
  3. 迭代器:类似指针,用于访问容器元素。通过迭代器差值可计算元素下标(迭代器 - 开始迭代器 = 下标)。

三、代码实现步骤详解

1. 引入头文件

cpp

运行

#include <iostream>   // 输入输出流
#include <vector>     // 向量容器
#include <algorithm>  // 包含find()函数
using namespace std;  // 简化命名空间

2. 读取输入数据

cpp

运行

int n, a;  // n:成绩个数;a:目标成绩
cin >> n;  // 读取nvector<int> s(n);  // 定义大小为n的向量s,存储成绩
for (int i = 0; i < n; i++) {cin >> s[i];  // 循环读取n个成绩,存入向量(下标0~n-1)
}cin >> a;  // 读取目标成绩a

3. 查找并输出位置

cpp

运行

auto it = s.begin();  // 定义迭代器it,初始指向向量第一个元素
bool found = false;   // 标记是否找到目标成绩,初始为false// 循环查找:每次从当前it位置开始,找到后更新it到下一个位置
while ((it = find(it, s.end(), a)) != s.end()) {// 若不是第一次输出,先输出空格(避免结尾多空格)if (found) cout << " ";// 计算位置:迭代器差值(下标)+1(位置从1开始)cout << (it - s.begin() + 1);found = true;  // 标记为已找到it++;  // 移动迭代器到下一个位置,避免重复查找当前元素
}// 若未找到,输出"no"
if (!found) {cout << "no";
}

四、关键逻辑解析

  1. 迭代器与下标转换:向量元素的下标从 0 开始,而题目要求位置从 1 开始。通过it - s.begin()可得到元素的下标(如it指向第 2 个元素时,it - s.begin() = 1),加 1 后即为题目要求的位置。

  2. 循环查找逻辑

    • 第一次查找从s.begin()开始,找到后通过it++将迭代器移动到下一个元素,确保下次从新位置开始查找。
    • find()返回s.end(),说明已遍历完所有元素且未找到,循环结束。
  3. 输出格式控制:用found标志判断是否为第一次输出。第一次输出直接打印位置,后续输出前先加空格,避免结尾出现多余空格(如样例 1 输出2 4 5,中间有空格,结尾无空格)。

五、示例测试

样例 1 输入:

plaintext

8
90 88 85 88 88 98 95 100
88
  • 向量s中的元素为[90,88,85,88,88,98,95,100](下标 0~7)。
  • 第一次查找:findbegin()开始,找到下标 1 的 88,位置为1+1=2it移动到下标 2。
  • 第二次查找:find从下标 2 开始,找到下标 3 的 88,位置为3+1=4it移动到下标 4。
  • 第三次查找:find从下标 4 开始,找到下标 4 的 88,位置为4+1=5it移动到下标 5。
  • 后续查找无结果,循环结束。最终输出2 4 5

样例 2 输入:

plaintext

8
90 88 85 88 88 98 95 100
99
  • 向量中无 99,find始终返回end()found保持 false,最终输出no

六、完整代码

cpp

运行

#include <iostream>
#include <vector>
#include <algorithm>using namespace std;int main() {int n, a;cin >> n;vector<int> s(n);for (int i = 0; i < n; i++) {cin >> s[i];}cin >> a;auto it = s.begin();bool found = false;while ((it = find(it, s.end(), a)) != s.end()) {if (found) cout << " ";cout << (it - s.begin() + 1);found = true;it++;}if (!found) {cout << "no";}return 0;
}

大家还可以在我的bilibili(编程题小白日记)搜索 ···0053.查找成绩(向量实现)··· 找到这道题的视频解析

http://www.dtcms.com/a/503301.html

相关文章:

  • STL中容器string -- 讲解超详细
  • Python lambda 表达式详解
  • 【JavaScript】原生函数
  • 渗透测试中爆破与撞库的区别
  • 门户网站如何做谷歌seo儿童网站建设
  • AI智能体的“瑞士军刀”:工具调用功能详解与实践
  • GYCTF2020
  • 2025-10-19 hetao1733837刷题记录
  • 批量字符替换工具,支持多种格式
  • 50.情感分析:AI读懂你的心情
  • 嵌入式Linux开发环境学习(二)
  • 分析静态代码分析工具
  • unix做网站常用的数据库用php做网站后台
  • Fiddler抓包+Postman实战之--客户关系管理软件自动化测试
  • 『 数据库 』MySQL复习 - 从更新删除到分组聚合查询实践
  • 力扣2025.10.19每日一题
  • 广州站扩建百度系app
  • 品牌微信网站开发企业网站排版规则
  • Java Socket 多线程实例
  • 机器学习01——概述
  • es的docker部署和docker相关的可可视化面板工具介绍
  • Java 反射机制深度剖析:性能与安全性的那些坑
  • SQLDeveloper 调试存储过程ORA-24247
  • 网站虚拟主机过期云霄县建设局网站
  • 如何通过共享内存和寄存器溢出优化CUDA内核性能
  • ArcMap转化图片为TIF
  • Kubernetes(K8s) —— 部署(保姆级教程)
  • 用 Python 写一个自动化办公小助手
  • 《二叉树“防塌”指南:AVL 树如何用旋转 “稳住” 平衡?》
  • 网站制作wap页面wordpress微信公众平台开发