随机产生一组互不相同的两位整数,然后通过键盘输入一个整数,利用折半查找法,查找该整数是否存在。
以为很简单的小程序,产生随机数时遇到了大问题,多次相同的随机数产生,另外还要进行排序,折半查找的前提就是有序数列。
产生随机数用到goto,暴力解决。可以通过改变n的值来改变猜中的概率。
#include<iostream> #include<stdlib.h> #include<string.h> #include<time.h> #include<algorithm> #define n 20 using namespace std; int a[n]; void find(int a[],int m) { int i,j,mid,high=n,low=0; sort(a,a+n); //c++快排函数 while(low<=high) //折半查找 { mid=(high+low)/2; if(a[mid]>m) { high=mid-1; } else if(a[mid]<m) { low=mid+1; } else { cout<<"Amazing!该数存在!"<<endl; //若a【mid】正好等于num,输出。 return ; } } if(low>high) //遍历数组后,没有找到 cout<<"Sorry....该数不存在。"<<endl; } int main() { int num,i,j,k,x; cout<<"请输入一个数字"<<endl; while(cin>>num) { memset(a,0,sizeof(a)); //清空数组 srand((unsigned)time(NULL)); //产生不同随机数函数 for(i=0;i<n;i++) { q: x=rand()