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