查找特定的值 题解

首先,我们先看题目:

题目描述

在一个序列(下标从 0 开始)中查找一个给定的值,输出第一次出现的位置。

输入格式

第一行包含一个正整数 n ,表示序列中元素个数。 1\le n \le 10000 。第二行包含 n 个整数,依次给出序列的每个元素,相邻两个整数之间用单个空格隔开。元素的绝对值不超过 10000 。第三行包含一个整数 x ,为需要查找的特定值。$x$ 的绝对值不超过 10000

输出格式

若序列中存在 x ,输出 x 第一次出现的下标;否则输出 -1

样例

Input 1

5 
2 3 6 7 3
3

Output 1

1

样例解释

在第 1 个位置(下标从 0 开始)找到第一个 3

数据范围

1\le n \le10000 。元素的绝对值不超过 10000x 的绝对值不超过 10000

理解题意:

给出一个 n ,和 n 个数字 a_i

从里面查找 x , 存在输出下表(从 a_0 开始)。

开始做题/理解原理:

我们存放多个数字,需要定义一个 数组

于是,我们按照题面,开了一个10000个元素的数组(main函数外)。
他是如下定义方式。

int a[10000];

我们开始写主函数,可以先初始化这个数组:

memset(a, 0, sizeof(a));

但是,想使用memset函数,就必须包含 <cstring> 这个头文件。如果您使用了万能头,则可以不用包含。

如果仅包含了iostream , cstdio则需要包含该头文件,否则会导致 \color{yellow}CE

我们直接看主程序部分,输入输出自己写就行了。

因为 O(10000) 可以在1s内输出出来,所以可以用枚举。

使用循环遍历整个数组,寻找和这个元素相同的第一个位置,输出出来,返回0

假设就拿样例1的数组来举例:

\{2,3,6,7,3\}, x = 3, n = 5

第一次判断 if (2 == 3) 不成立,
所以这次循环未作任何操作。

第二次判断 if (3 == 3) 成立,
所以,这次循环直接输出下表 1
然后程序退出。

以下是核心代码:

for (int i = 0;i < n;i++) {
    if (a[i] == x) {
      cout << i;
      return 0;
    }
  }
cout << -1;

欢迎随时指出问题,如果愿意的话,点个赞也行。

本文为原创文章,若需转载,请填写原帖链接。