查找成绩(数组实现)

题目

题目描述

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

相关推荐
会员源码网1 小时前
使用`mysql_*`废弃函数(PHP7+完全移除,导致代码无法运行)
后端·算法
木心月转码ing2 小时前
Hot100-Day10-T438T438找到字符串中所有字母异位词
算法
HelloReader3 小时前
Wi-Fi CSI 感知技术用无线信号“看见“室内的人
算法
颜酱5 小时前
二叉树分解问题思路解题模式
javascript·后端·算法
qianpeng8977 小时前
水声匹配场定位原理及实验
算法
董董灿是个攻城狮18 小时前
AI视觉连载8:传统 CV 之边缘检测
算法
blasit1 天前
笔记:Qt C++建立子线程做一个socket TCP常连接通信
c++·qt·tcp/ip
AI软著研究员1 天前
程序员必看:软著不是“面子工程”,是代码的“法律保险”
算法
FunnySaltyFish1 天前
什么?Compose 把 GapBuffer 换成了 LinkBuffer?
算法·kotlin·android jetpack
颜酱1 天前
理解二叉树最近公共祖先(LCA):从基础到变种解析
javascript·后端·算法