查找成绩(数组实现)

题目

题目描述

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

输入格式

输入数据第一行为正整数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

```

一、明确需求

首先要知道程序要做什么:

  1. 输入一个整数 n(表示有 n 个成绩);
  2. 输入 n 个成绩(整数),存储起来;
  3. 输入一个要查找的成绩 c
  4. 在存储的成绩中查找 c,如果找到,输出所有 c 对应的位置(位置从 1 开始数);
  5. 如果没找到,输出 "no"。

二、设计思路

根据需求,我们可以拆解出几个核心步骤:

  1. 接收输入 :先读 n,再读 n 个成绩,最后读要查找的 c
  2. 存储数据 :用数组存储这 n 个成绩(数组方便按位置访问);
  3. 查找逻辑 :遍历数组,逐个对比元素是否等于 c,记录所有匹配的位置;
  4. 输出结果:如果有匹配的位置,输出这些位置;否则输出 "no"。

三、代码实现步骤(C++)

步骤 1:引入必要的头文件和命名空间
  • #include<bits/stdc++.h> 包含所有标准库(简化代码,不用逐个写头文件);
  • using namespace std; 避免每次输入输出都加 std::

cpp

运行

复制代码
#include<bits/stdc++.h>
using namespace std;
步骤 2:编写主函数 main

程序从 main 函数开始执行,所以所有逻辑都在这里实现。

cpp

运行

复制代码
int main() {
    // 后续代码写在这里
    return 0; // 程序结束
}
步骤 3:接收并存储成绩个数 n

定义一个整数变量 n,用 cin 从键盘读取输入。

cpp

运行

复制代码
int n; // 存储成绩的个数
cin >> n; // 读取n
步骤 4:存储 n 个成绩到数组
  • 定义一个数组 a,长度为 n(注意:数组下标可以从 1 开始,方便直接对应 "位置");
  • 用循环读取 n 个成绩,依次存入数组。

cpp

运行

复制代码
int a[n]; // 定义数组存储成绩(下标1~n对应位置1~n)
for (int i = 1; i <= n; i++) { // 循环n次,i从1开始
    cin >> a[i]; // 读取第i个成绩,存入a[i]
}
步骤 5:接收要查找的成绩 c

定义变量 c,读取用户输入的目标成绩。

cpp

运行

复制代码
int c; // 要查找的成绩
cin >> c;
步骤 6:遍历数组查找 c,记录位置
  • 用一个布尔变量 flag 标记是否找到(初始为 false,找到后改为 true);
  • 遍历数组,对每个元素 a[i],如果等于 c,就输出 i(位置),并更新 flag

cpp

运行

复制代码
bool flag = false; // 标记是否找到,初始为未找到
for (int i = 1; i <= n; i++) { // 遍历所有成绩
    if (a[i] == c) { // 如果当前成绩等于c
        cout << i << " "; // 输出位置i(带空格分隔)
        flag = true; // 标记为已找到
    }
}
步骤 7:处理 "未找到" 的情况

如果循环结束后 flag 仍为 false,说明没找到 c,输出 "no"。

cpp

运行

复制代码
if (!flag) { // 如果flag是false(没找到)
    cout << "no";
}

四、完整代码

把上面的步骤组合起来,就是完整的程序:

cpp

运行

复制代码
#include<bits/stdc++.h>
using namespace std;

int main() {
    int n; // 成绩的个数
    cin >> n;
    
    int a[n]; // 存储成绩的数组(下标1~n)
    for (int i = 1; i <= n; i++) {
        cin >> a[i];
    }
    
    int c; // 要查找的成绩
    cin >> c;
    
    bool flag = false; // 标记是否找到
    for (int i = 1; i <= n; i++) {
        if (a[i] == c) {
            cout << i << " ";
            flag = true;
        }
    }
    
    if (!flag) { // 没找到时输出no
        cout << "no";
    }
    
    return 0;
}

五、测试示例

我们用实际输入测试一下,确保程序正确:

测试 1:找到多个位置
  • 输入: plaintext

    复制代码
    8
    90 88 85 88 88 99 95 100
    88
  • 程序执行:数组中位置 2、4、5 都是 88,所以输出 2 4 5 (结尾的空格不影响结果)。

测试 2:找到一个位置
  • 输入: plaintext

    复制代码
    8
    90 88 85 88 88 99 95 100
    99
  • 程序执行:只有位置 6 是 99,输出 6

测试 3:未找到
  • 输入: plaintext

    复制代码
    3
    100 90 80

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

相关推荐
MicroTech20254 小时前
微算法科技MLGO推出隐私感知联合DNN模型部署和分区优化技术,开启协作边缘推理新时代
科技·算法·dnn
小冯记录编程4 小时前
深入解析C++ for循环原理
开发语言·c++·算法
磨十三5 小时前
C++ 容器详解:std::list 与 std::forward_list 深入解析
开发语言·c++·list
今麦郎xdu_5 小时前
【Linux系统】命令行参数和环境变量
linux·服务器·c语言·c++
chenchihwen6 小时前
深度解析RAG系统中的PDF解析模块:Docling集成与并行处理实践
python·算法·pdf
情深不寿3177 小时前
C++特殊类的设计
开发语言·c++·单例模式
做科研的周师兄7 小时前
【机器学习入门】7.4 随机森林:一文吃透随机森林——从原理到核心特点
人工智能·学习·算法·随机森林·机器学习·支持向量机·数据挖掘
Vanranrr7 小时前
nullptr vs NULL:C/C++ 空指针的演变史
c语言·c++
切糕师学AI7 小时前
【多线程】阻塞等待(Blocking Wait)(以C++为例)
c++·多线程·并发编程·阻塞等待
Sunsets_Red7 小时前
差分操作正确性证明
java·c语言·c++·python·算法·c#