3.2 查找元素
给定一些元素,然后查找满足某个条件的某个元素。
一般范围小的数据可以直接使用遍历每一个元素的方法查找;如果范围比较大,那么可以用二分查找等算法来查找。
题目描述:
输入一个数n(1<=n<=200),然后输入n个数值各不相同的数,再输入一个值x,输出这个值在这个数组中的下标(从0开始,若不在数组中则输出-1)。
输入格式:
测试数据有多组,输入n(1<=n<=200),接着输入n个数,然后输入x。
输出格式:
对于每组输入,请输出结果。
样例输入:
4
1 2 3 4
3
样例输出:
2
思路:
题目很简单,以样例为例。第一行的4代表我们总共会输入4个数字,第二行即代表要输入的4个数据,我们需要用数组存放。第三行是需要查找的数字,这里是3。使用for循环从0开始查找,3在下标为2的位置。所以样例输出为2。这里我们也要考虑若数字不在给定的数据中的情况,所以可以使用一个标记来记录查询的次数。
参考代码:
#include <cstdio>
// n大于等于1,小于等于200
const int N = 210;
int num[N];
int main(){
int n, x;
// 由于codeup是多点测试,所以使用while读取到文件末尾
// 单点测试只需要去掉while即可。
while(scanf("%d", &n) != EOF){
// 按顺序读入给定的查询数据
for(int i=0; i<n; i++){
scanf("%d", &num[i]);
}
// 标记,用来记录查询次数
int step=0;
// 读入要查找的x
scanf("%d", &x);
// 循环遍历查询数据,查找x
for(int i=0; i<n; i++){
// 找到x则输出下标并跳出循环
// 因为n个数字都是不相同的
if(num[i] == x){
printf("%d\n", i);
break;
}
// 否则记录查询次数
step++;
}
// 若循环结束,查询次数等于数据个数,
// 则x不在数据中,输出-1
if(step == n){
printf("-1\n");
}
}
return 0;
}