题目链接:http://codeup.cn/problem.php?cid=100000585&pid=0
题目描述
输入一个数n,然后输入n个数值各不相同,再输入一个值x,输出这个值在这个数组中的下标(从0开始,若不在数组中则输出-1)。
输入
测试数据有多组,输入n(1<=n<=200),接着输入n个数,然后输入x。
输出
对于每组输入,请输出结果。
样例输入
4
1 2 3 4
3
样例输出
2
代码
方法一(二分法):
#include<stdio.h>
int find_x(int a[], int left, int right, int x) {
int mid;
while(left <= right) {
mid = left + (right - left) / 2;
if(a[mid] == x)
return mid;
else if(a[mid] < x)
left = mid +1;
else
right = mid - 1;
}
return -1;
}
int main() {
int n, x, a[210];
while(scanf("%d", &n) != EOF) {
for(int i = 0; i < n; i++)
scanf("%d", &a[i]);
scanf("%d",&x);
printf("%d\n", find_x(a, 0, n - 1, x));
}
return 0;
}
方法二(简单遍历):
#include<stdio.h>
int main() {
int n, x, i, a[210];
while(scanf("%d", &n) != EOF) {
for(i = 0; i < n; i++)
scanf("%d", &a[i]);
scanf("%d",&x);
for(i = 0; i < n; i++)
if(a[i] == x)
break;
if(i == n)
printf("-1\n");
else
printf("%d\n", i);
}
return 0;
}
【注】:两个方法均已OJ通过,若题中给出的序列不是有序的,需要先对数组排序,要用到结构体记录每个数据的初始数组位置。