趣味二分法
2012-04-21 18:22
399 查看
趣味游戏:猜数字
前序:历史渊源
不晓得你是否玩过猜数字的游戏?如果玩过,那么你猜对过几回呢?你是怎样猜对的?有什么诀窍吗?
记得当年头几次玩这个游戏的时候,那就是一个胡猜,加上老天也不助我,一次都没有蒙对,想起来很是悲催。所以当时就有一个念头:自己买彩票肯定中不了!后来在开始学习编程时,有一次课间休息的时候老师让大家来做个游戏,说是猜数字。我当时就有点不淡定了。结果玩了几个回合,大家猜的都不咋的,但是老师那家伙是一猜一个准,我当时就感觉真厉害。于是乎,他就把他自己写的代码给我们看,看完之后,大家都惊呼:原来是这样啊,要是我知道我也能猜对!
那到底是怎样呢?我们来看看。
正文:道出原委
其实,猜数字想要猜对很容易。其核心就是利用二分法的思想。闲言少叙,我还是用一个例子来说明过程吧。
要求:有两个人甲和乙,在1――100这100个数中,由甲随意写一个数(只有甲知道),现在由乙来猜甲写的这个数,并且猜对这个数时猜的次数最少。
分析:对于这个问题,有两种情况。
情况一:想都不用想,随便猜。这样,猜对时所用的次数就是1 <= N <= 100.如果你命好,一次或者两次就猜对了,那么恭喜你,你真的可以去买彩票了;相反,你就要用好几十次才能猜对。
情况二:利用二分法。过程如下:
实现代码如下:
结束语
写本文的目的:轻松一刻!
本文出自 “SuperFC之替天行道” 博客,请务必保留此出处http://fengchaokobe.blog.51cto.com/2246555/1201123
前序:历史渊源
不晓得你是否玩过猜数字的游戏?如果玩过,那么你猜对过几回呢?你是怎样猜对的?有什么诀窍吗?
记得当年头几次玩这个游戏的时候,那就是一个胡猜,加上老天也不助我,一次都没有蒙对,想起来很是悲催。所以当时就有一个念头:自己买彩票肯定中不了!后来在开始学习编程时,有一次课间休息的时候老师让大家来做个游戏,说是猜数字。我当时就有点不淡定了。结果玩了几个回合,大家猜的都不咋的,但是老师那家伙是一猜一个准,我当时就感觉真厉害。于是乎,他就把他自己写的代码给我们看,看完之后,大家都惊呼:原来是这样啊,要是我知道我也能猜对!
那到底是怎样呢?我们来看看。
正文:道出原委
其实,猜数字想要猜对很容易。其核心就是利用二分法的思想。闲言少叙,我还是用一个例子来说明过程吧。
要求:有两个人甲和乙,在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
相关文章推荐
- 趣味二分法
- 打造逼真趣味DIY印章
- 怎样通过无线网络连接打印机?? 无线打印趣味玩法
- 自主编程实现二分法查找
- 二分法
- 趣味解析,斗鱼直播大数据的玩法儿
- noip2009 luogu1072 Hankson的趣味题
- java二分法查找
- 二分法求快速幂
- java趣味算法(一)——约瑟夫问题
- 关于二分法的边界感悟-java实现
- 趣味机器学习入门小项目(附教程与数据)
- Python 零基础 快速入门 趣味教程 (咪博士 海龟绘图 turtle) 4. 函数
- 二分法查找
- poj 3273 二分法变形——最大化最小值问题
- 洛谷 P1072 Hankson 的趣味题
- C语言趣味一百道 第21题 2017_12_22
- linux源码中的二分法:lib/bsearch.c
- C++ 模板,二分法寻找vector中指定元素位置
- 多重响应分析,多选题二分法思路