输入n(n<100)的值,以及n个从小到大排序的整数序列,再输入一个待查找的整数m,使用二分法进行查找该数的序号。
输入:第一行为整数 n,第二行包括 n个整数,以空格分隔,第三行为整数 m。 输出:如果能够在序列中找到整数 m,则输出其编号(编号从1开始,如果存在多个编号,则返回编号最小的),否则输出 None。
测试说明
样例输入:
10
1 2 4 5 6 7 8 9 10 11
10
样例输出:9
输入n(n<100)的值,以及n个从小到大排序的整数序列,再输入一个待查找的整数m,使用二分法进行查找该数的序号。
输入:第一行为整数 n,第二行包括 n个整数,以空格分隔,第三行为整数 m。 输出:如果能够在序列中找到整数 m,则输出其编号(编号从1开始,如果存在多个编号,则返回编号最小的),否则输出 None。
测试说明
样例输入:
10
1 2 4 5 6 7 8 9 10 11
10
样例输出:9
为大佬送上代码~
#include <bits/stdc++.h>
using namespace std;
int main() {
int n;
cin >> n;
int a[n];
for (int i = 0; i < n; ++i) {
cin >> a[i];
}
int key;
cin >> key;
int l = 0, r = n - 1;
int ans = -1;
while (l <= r) {
int mid = (l + r) >> 1;
if (a[mid] == key) {
ans = mid + 1;
break;
} else if (a[mid] > key) {
r = mid - 1;
} else {
l = mid + 1;
}
}
if (ans == -1) {
cout << "None\n";
} else {
cout << ans << '\n';
}
return 0;
}
有问题可以私信蒟蒻君~一起讨论吖