题目描述
在一个递增的序列里,查找元素是否存在,若存在输出YES,不存在输出NO.
输入
本题多组数据,首先输入一个数字n,然后输入n个数,数据保证数列递增,然后再输入一个查找数字。
输出
若存在输出YES,不存在输出NO.
示例输入
4 1 3 5 8 3
示例输出
YES#include<stdio.h> int main() { int m,c,i,j,n,a[100000],mid; while(scanf("%d",&m)!=EOF) { for(i=1; i<=m; i++) scanf("%d",&a[i]); scanf("%d",&c); n=1;j=0; while(n<=m) { mid=(n+m)/2; if(a[mid]==c) {j=1;break;} else if(a[mid]<c) n=mid+1; else m=mid-1; } if(j) printf("YES\n"); else printf("NO\n"); } return 0; }
#include<stdio.h> #include<iostream> #include<algorithm> using namespace std; int cmp(int a,int b) { return a<b; } int res(int a[],int qi,int hou,int zhao) { int mid; if(qi<=hou) { mid=qi+(hou-qi)/2; if(a[mid]==zhao) return mid; else if(a[mid]>zhao) { return res(a,qi,mid-1,zhao); } else { return res(a,mid+1,hou,zhao); } } return -1; } int main() { int m,n,i,l=0; while(~scanf("%d",&m)) { int a[100002]; for(i=0; i<m; i++) { scanf("%d",&a[i]); } scanf("%d",&n); sort(a,a+m,cmp); l=res(a,0,m-1,n); if(l!=-1) printf("YES\n"); else printf("NO\n"); } return 0; }