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;
}