【问题描述】给定一个有序的整数序列以及一个正整数,利用递归进行二分查找,判断该正整数是否在该序列当中
如果在,则输出yes,不在则输出no
输入形式】1 3 7 10 12
5
【输出形式】no
【样例输入】1 3 7 10 1210
【样例输出】yes
【样例输入】2 4 9 12 14 21
11
【样例输出】no
问题比较简单,但是输入忘记了不会
两种方法
第一种:
#include <bits/stdc++.h>
using namespace std;
int a[100];
void f(int x,int left,int right){
if(left==right){
if(a[left]==x)cout<<"yes";
else cout<<"no";
return;
}
int mid=(left+right)/2;
if(a[mid]==x){
cout<<"yes";
return;
}
if(a[mid]>x)
f(x,left,mid-1);
if(a[mid]<x)
f(x,mid+1,right);
}
int main() {
int k = 0,i=0,x;
while (cin >> k) {
a[i]=k;
i++;
if (cin.get() == '\n') break;
}
cin>>x;
f(x,0,i-1);
return 0;
}
第二种 用的是大二下学期学的istringstream
#include <bits/stdc++.h>
using namespace std;
int a[100];
void f(int x,int left,int right){
if(left==right){
if(a[left]==x)cout<<"yes";
else cout<<"no";
return;
}
int mid=(left+right)/2;
if(a[mid]==x){
cout<<"yes";
return;
}
if(a[mid]>x)
f(x,left,mid-1);
if(a[mid]<x)
f(x,mid+1,right);
}
int main() {
string st1;
getline(cin,st1);
istringstream iss(st1);
int x,k,i=0;
while(iss>>k){
a[i]=k;
i++;
}
cin>>x;
f(x,0,i-1);
return 0;
}