二分查找noj

    科技2025-07-27  11

    #include<stdio.h> #define MAXSIZE 50000 #define TRUE 1 #define FALSE 0 int Search(int *a,int low,int high,int b); int main() { int n; int i=0; int a[MAXSIZE],b[MAXSIZE]; int m,t; scanf("%d",&n); for(i=0;i<n;i++){ scanf("%d",&a[i]); } scanf("%d",&m); for(i=0;i<m;i++){ scanf("%d",&b[i]); } for(i=0;i<m;i++){ t=Search(a,0,n-1,b[i]); if(t==TRUE)printf("Yes\n"); else printf("No\n"); } return 0; } int Search(int *a,int low,int high,int b) { int mid; if(low<=high){ mid=(low+high)/2; if(a[mid]==b)return TRUE; if(a[mid]>b)return Search(a,low,mid-1,b); if(a[mid]<b)return Search(a,mid+1,high,b); } else return FALSE; } #include<iostream> #define MAXN 10000 #define true 1 #define false 0 using namespace std; int n;//整数的个数 int a[MAXN]; int m;//查询的个数 int Merge(int *a,int k,int low,int high); int main() { int i,k; cin>>n; for(i=0;i<n;i++){ cin>>a[i]; } cin>>m; while(m>0){ cin>>k; if(Merge(a,k,0,n-1))cout<<"Yes"<<endl; else cout<<"No"<<endl; m--; } return 0; } int Merge(int *a,int k,int low,int high) { int mid; if(low<=high){ mid=(low+high)/2; if(a[mid]==k)return true; if(a[mid]<k){ low=mid+1; return Merge(a,k,low,high); } if(a[mid]>k){ high=mid-1; return Merge(a,k,low,high); } } return false; }

    注意:这里的return 语句起到非常作用:接连递归。

    Processed: 0.010, SQL: 9