2865: 练56.1 猜猜乐
内存限制:64 MB
时间限制:1.000 S
评测方式:文本比较
命题人:
提交:1
解决:1
题目描述
格莱尔和尼克玩猜数游戏。格莱尔默默选定一个数(1 ~ 100之间的整数),尼克每次猜一个数,格莱尔会告诉尼克他是猜大了还是猜小了,或是猜对了。尼克采用二分法猜数,请你模拟尼克猜数的过程。
输入
一行一个整数,为n。
输出
输出若干行,每行一个整数,为此时二分得到的数,当二分得到的数为n时,输出“成功!”,否则当二分结束时,输出“失败!”。
样例输入 复制
56
样例输出 复制
50
75
62
56
成功!
提示
#include<iostream> using namespace std; int search(int b[],int len,int key){ int high,low; high=len-1; low=0; int mid=len/2; while(high>=low){ mid=(high+low)/2; //求出二分中间的数 cout<<b[mid]<<endl; //输出该数 if(b[mid]==key) return mid; else if(b[mid]>key) //如果该数大于所求的数 high=mid-1; //范围缩小 else //反之亦然 low=mid+1; } return 0; } int main(){ const int MAX=100; int a[MAX],n; for(int i=0;i<MAX;i++) //预处理 a[i]=i+1; do //输入符合条件的 n { cin>>n; }while(n<1||n>100); if(search(a,MAX,n)) cout<<"成功!"; else cout<<"失败!"; return 0; }