问题 A: 【递归】二分查找
题目描述
用递归算法实现二分查找,即:有n个已经从小到大排序好的数据(不重复),从键盘输入一个数X,用对半查找方法,判断它是否在这n个数中。
输入
第一行,正整数n,N<=105;
第二行,n个整数(int范围内,不重复),中间用空格分隔;
第三行,整数X。
输出
如果找到X,输出其位置;否则输出-1。
样例输入
10
10 20 30 40 50 60 70 80 90 100
90
样例输出
9
代码:
#include<iostream>
using namespace std;
int ans=-1;
int a[100005];
int b,n;
void find(int,int);
int main()
{
cin>>n;
for(int i=1;i<=n;i++)cin>>a[i];
cin>>b;
find(1,n);
cout<<ans<<endl;
return 0;
}
void find(int x,int y)
{
int mid=(x+y)/2;
if(a[mid]==b)
{
ans=mid;
return;
}
else if(x>y)return;
else
{
if(a[mid]<b)find(mid+1,y);
if(a[mid]>b)find(x,mid-1);
}
}
问题 C: 循环比赛日程表
题目描述
设有n个选手进行循环比赛,其中n = 2^m,要求每名选手要与其他n - 1名

这篇博客介绍了二分查找算法在解决实际问题中的应用,包括递归实现二分查找来判断数字是否存在,以及使用二分法解决循环比赛日程表的安排问题。同时,还涉及到了牛舍布局优化问题和寻找序列中平均数最大子段的二分算法解法。
最低0.47元/天 解锁文章
991

被折叠的 条评论
为什么被折叠?



