查找成绩(数组实现)

题目

## 题目描述

输入一组成绩,共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,输出 
测试 3:未找到
  • 输入:

    plaintext

    3
    100 90 80

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值