查找成绩(数组实现)

题目

题目描述

输入一组成绩,共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.查找成绩(数组实现)··· 找到这道题的视频解析

相关推荐
Frank_refuel15 分钟前
C++11之一场名为“搬家”的 C++ 之旅
开发语言·c++
hetao17338372 小时前
2026-10-03~04 hetao1733837 的刷题记录
c++·算法
Zootopia6263 小时前
飞行力学知识梳理1|飞行性能与稳定性
人工智能·python·算法·机器学习·无人机·学习方法·信息与通信
longlongzihan3 小时前
从LeetCode 70. 爬楼梯看动态规划:如何精准推导状态转移方程?
c++·算法·leetcode·动态规划
2601_960356384 小时前
2027校招采购岗解析:数学基础如何迁移到需求预测、成本与供应商分析
人工智能·算法
h_a_o777oah4 小时前
【树论】树链剖分:将树形结构转化为线性结构以处理树上路径问题(洛谷 P3384 附C++代码模板)
数据结构·算法·线段树·acm·树链剖分·树论·重链剖分
HEJOO95 小时前
指针的算术运算详解
java·数据结构·算法
Coder-magician5 小时前
《代码随想录》刷题打卡day47:并查集-part01
数据结构·算法·图论
垆边人似月.5 小时前
VLAN 资源池(100~200 分档)
数据结构·算法
潼心1412o6 小时前
C++初阶(长期更新)第6讲:类和对象(下)
开发语言·c++·算法