问题 A: 找x
时间限制: 1 Sec 内存限制: 32 MB题目描述
输入一个数n,然后输入n个数值各不相同,再输入一个值x,输出这个值在这个数组中的下标(从0开始,若不在数组中则输出-1)。
输入
测试数据有多组,输入n(1<=n<=200),接着输入n个数,然后输入x。
输出
对于每组输入,请输出结果。
样例输入
4
1 2 3 4
3
样例输出
2
User: 吴锦诚 Date: 2018/6/10
#include <iostream>
#include <algorithm>
using
namespace
std;
struct
N {
int
value;
int
oldindex;
};
bool
cmp(N a, N b) {
return
a.value < b.value;
}
int
main()
{
//输入n
int
n, m, i, left, right, middle;
N an[202];
while
(cin >> n) {
//输入数组an
for
(i = 0; i <n; i++) {
cin >> an[i].value;
an[i].oldindex = i;
}
//输入m
cin >> m;
//排序
sort(an, an + n , cmp);
//输出位置
left = 0;
right = n - 1;
while
(right >= left) {
middle = left + (right - left) / 2;
//二分左部
if
(an[middle].value > m) {
right = middle - 1;
}
else
if
(an[middle].value<m)
{
left = middle + 1;
}
else
{
cout << an[middle].oldindex << endl;
break
;
}
if
(right < left)
cout << -1 << endl;
}
}
return
0;
}
/**************************************************************
Problem: 1934
User: morizunzhu
Language: C++
Result: 正确
Time:0 ms
Memory:2024 kb
****************************************************************/