第一题: 二分查找
问题定义
大家一定都能熟练掌握二分查找啦!那么来计算二分的次数吧!
约定二分的中点mid = (left + right) / 2。
输入:
第一行输入一个整数N(N<=10000)。
第二行输入N个升序整数。
第三行输入一个待查找的整数(必定在第二行中出现过)。
输出:
输出二分查找该整数时,进行过多少次二分。
输入样例
5
18 53 54 74 99
53
输出样例
2
#include <stdio.h>
#include <iostream>
#include <algorithm>
#pragma warning(disable:4996);
using namespace std;
const int maxn = 10010;
int a[maxn];
int n;
int binary(int left, int right, int num, int ans)
{
if (left <= right)
{
int mid = (left + right) / 2;
if (a[mid] == num)
{
return ++ans;
}
else {
if (a[mid] < num) {
binary(mid, right,num,++ans);
}
else {
binary(left, mid, num, ++ans);
}
}
}
}
int main()
{
scanf("%d", &n);
for (int i = 0; i < n; i++)
{
scanf("%d", &a[i]);
}
sort(a, a + n);
int num;
scanf("%d", &num);
int ans = binary(0, n, num, 0);
printf("%d", ans);
}