题目
答案
#include<iostream>
using namespace std;
int find(int a[],int left,int right)
{
if(left==right)
{
if(a[left]==left) return left;
else return -1;
}
int mid=(left+right)/2;
if(a[mid]==mid) return mid;
else
{
if(a[mid]<mid) left=mid+1;
else right=mid-1;
return find(a,left,right);
}
}
int main()
{
int n;
cin>>n;
int a[n+1],i,j;
for(i=1;i<=n;i++)
cin>>a[i];//数值输入部分
int flag=find(a,1,n);
if(flag) cout<<flag;
else cout<<0;
}
注意
- 这道题既可以采用递归,也可以采用二分查找,思路是一致的
- 输入数据时要符合题目条件按顺序输入,不要随便输入(我之前就栽在这了,呜呜呜)