您的位置:首页 > 其它

趣味二分法

2012-04-21 18:22 399 查看
趣味游戏:猜数字

前序:历史渊源

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

正文:道出原委

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

要求:有两个人甲和乙,在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,猜数字的游戏就是这样来玩的。如果你有兴趣的话试一下吧!权当放松心情,缓解一下疲劳吧!

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

本文出自 “SuperFC之替天行道” 博客,请务必保留此出处http://fengchaokobe.blog.51cto.com/2246555/1201123
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: