首先,我们先看题目:
题目描述
在一个序列(下标从 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 。元素的绝对值不超过 10000 。 x 的绝对值不超过 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;
欢迎随时指出问题,如果愿意的话,点个赞也行。
本文为原创文章,若需转载,请填写原帖链接。