趣味二分法

来源:互联网 发布:改装荣威矩阵式led大灯 编辑:程序博客网 时间:2024/05/01 03:13
趣味游戏:猜数字

前序:历史渊源

       不晓得你是否玩过猜数字的游戏?如果玩过,那么你猜对过几回呢?你是怎样猜对的?有什么诀窍吗?
       记得当年头几次玩这个游戏的时候,那就是一个胡猜,加上老天也不助我,一次都没有蒙对,想起来很是悲催。所以当时就有一个念头:自己买彩票肯定中不了!后来在开始学习编程时,有一次课间休息的时候老师让大家来做个游戏,说是猜数字。我当时就有点不淡定了。结果玩了几个回合,大家猜的都不咋的,但是老师那家伙是一猜一个准,我当时就感觉真厉害。于是乎,他就把他自己写的代码给我们看,看完之后,大家都惊呼:原来是这样啊,要是我知道我也能猜对!
       那到底是怎样呢?我们来看看。


正文:道出原委

       其实,猜数字想要猜对很容易。其核心就是利用二分法的思想。闲言少叙,我还是用一个例子来说明过程吧。

       要求:有两个人甲和乙,在1——100这100个数中,由甲随意写一个数(只有甲知道),现在由乙来猜甲写的这个数,并且猜对这个数时猜的次数最少。
       分析:对于这个问题,有两种情况。

 
       情况一:想都不用想,随便猜。这样,猜对时所用的次数就是1 <= N <= 100.如果你命好,一次或者两次就猜对了,那么恭喜你,你真的可以去买彩票了;相反,你就要用好几十次才能猜对。

       情况二:利用二分法。过程如下:

实现代码如下:
#include<iostream>#include<cmath>#include<stdlib.h>using namespace std;void prompt();int CreateNum();int GuessNum();bool Comp(int result,int gn);int main(){    int result,i,gn;    prompt();    result = CreateNum();    for(i = 0;i < 7;i++) {        gn = GuessNum();        if(Comp(result,gn)) {            cout<<"你猜对了,厉害!"<<endl;            break;            }        else cout<<"不对,请继续猜!"<<endl;        }    //Comp(result,gn);    cout<<"系统所产生的数是:"<<result;    return 0;}//...输出游戏的提示信息void prompt(){    cout<<"---------欢迎你来玩猜数字游戏----------"<<endl;    }//...系统自动产生从1~100之间的随机数int CreateNum(){    srand( (unsigned) time(NULL));    int result = (rand()%100) +1;    //int result = (int)(100*rand()/(RAND_MAX+1.0));    return result;    }//...请你输入一个所猜的数int GuessNum(){    int gn;    cout<<"请输入您所猜的数:";    cin>>gn;    return gn;    }//...比较两数是否相等bool Comp(int result,int gn){    if(result == gn) {        cout<<"恭喜你!猜对了,真厉害!"<<endl;        return 1;        }    else if(result > gn) {        cout<<"小了,大点!"<<endl;        }    else cout<<"大了,小点!"<<endl;        return 0;}
       OK,猜数字的游戏就是这样来玩的。如果你有兴趣的话试一下吧!权当放松心情,缓解一下疲劳吧!

结束语
       写本文的目的:轻松一刻!

原创粉丝点击