c++自制小游戏(2nd)rand与srand
来源:互联网 发布:网络杀毒软件有哪些 编辑:程序博客网 时间:2024/06/03 16:33
如果你看了上章的数字炸弹的话,你会觉得炸弹数的设置特别……怎么说呢?不好用。也就是说,我们应该让软件来选择炸弹数才公平。于是,我为大家介绍……
函数rand,函数原型int rand(void),用途:生成一个0~RANDMAX之间的假随机整数
你也许会问,RANDMAX是什么。RANDMAX是一个宏定义常量。根据系统以及编译器、开发软件的不同,一般为32767和2147483647。
你也许还会问,假随机是什么意思?呃……你可以理解为是让软件/电脑来选择这个数,并不是绝对的随机
于是嘛……改一改
#include<iostream>using namespace std;int main( ){ int x=rand( ),maxn=100,minn=1,a; while(1){ cout<<minn<<'~'<<maxn<<endl; cin>>a; if(a>=minn && a<=maxn){ if(a>x) maxn=a; else if(a<x) minn=a; else{ cout<<"Boom!"; return 0; } } }}
好吧,问题又出来了。rand的范围是0~RANDMAX,但我们只需要1~100。想想办法?
其实只要用%就可以轻松实现。1~100是100个数,我们就用rand( )%100,范围是0~99。还差一点,于是我们再加1得:rand( )%100+1来表示1~100。
哈哈,聪明吧!(当然这方法也不是我发明的)类似的,如果我们要使范围为a~b。其中是(b-a+1)个数,用rand( )%(b-a+1),范围为0~b-a。再加a得:rand( )%(b-a+1)+a来表示a~b
就当这是个公式背下来吧
a~b之间的伪随机数:rand( )%(b-a+1)+a
再改
#include<iostream>#include<cstdlib>using namespace std;int main( ){ int x=rand( )%100+1,maxn=100,minn=1,a; while(1){ cout<<minn<<'~'<<maxn<<endl; cin>>a; if(a>=minn && a<=maxn){ if(a>x) maxn=a; else if(a<x) minn=a; else{ cout<<"Boom!"; return 0; } } }}
你把这个编译运行一下,会发现每次的炸弹都是一样的。怎么办怎么办……
于是我要请出另一位嘉宾:
函数srand,原型void srand(unsigned int),用途:为rand提供种子
这是什么意思呢?其实你不用管那么多。如果你实在要知道的话,告诉你:电脑选择(伪)随机数的指标是当时的time。所以如果不加这个的话,失去了指标,就只能以某一段物理内存(一般是4B)里的数返回(而且永远只会是这4B里的数)
(一般)使用方法:srand(time(0))
最后再贴一次代码:
#include<iostream>#include<cstdlib>#include<ctime>using namespace std;int main( ){ srand(time(0)); int x=rand( )%100+1,maxn=100,minn=1,a; while(1){ cout<<minn<<'~'<<maxn<<endl; cin>>a; if(a>=minn && a<=maxn){ if(a>x) maxn=a; else if(a<x) minn=a; else{ cout<<"Boom!"; return 0; } } }}
最后补一句,rand和srand在stdlib.h里有定义,time在time.h里定义
第三期见
- c++自制小游戏(2nd)rand与srand
- c++rand()与srand()的使用
- C++,rand,srand随机数
- c++rand()和srand()
- rand()与srand()用法
- 函数rand()与srand()
- rand()与srand()
- rand()与srand()
- srand与rand
- rand() 与srand() 函数
- 随机数(rand与srand)
- rand 与srand 关系
- 立此存照(6)[C语言]rand()函数与srand函数
- C语言rand()与srand()的简单实现
- C函数 随机数rand() srand()
- srand和rand函数(C++)
- C rand 和 srand 函数
- rand()与srand()的用法
- 写在大年初一 总结2016
- 启示录:一只小白的IT路
- react-router 学习笔记
- Leedcode题解
- 神经网络 ANN(二)
- c++自制小游戏(2nd)rand与srand
- Linux关于磁盘管理的二三事(一)
- 黑苹果(Hackintosh)驱动Intel HD 4600
- leetcode104 Maximum Depth of Binary Tree
- VTK修炼之道36:图像平滑_均值滤波器
- hiho一下 第135周 九宫 (枚举幻方)
- Recurrent Neural Network系列3--理解RNN的BPTT算法和梯度消失
- ssh localhost免密码后依然需要输入密码问题的解决
- 二叉树的下一个结点(二叉树中序遍历的使用)