如何产生一个从x到y的k个随机数 Random(int x,int y ,int k)
2015-06-10 11:16
501 查看
1.设置随机数种子
若不进行设置,系统默认为种子为1,那么每次运行程序产生的随机数是一样的;
通过void srand(unsigned int seed)来设置种子
为了使每次运行程序产生的一组随机数不一样,就要同步改变种子的值
因为系统时间每个时刻都不一样,所以可以利用time(0)获取系统时间作为种子
所以: srand (time(0))可以实现随机数的不可预见性
2.控制随机数产生的范围
rand( )的原始范围是(0,RAND_MAX),RAND_MAX的值包含在头文件stdlib.h当中;
若要得到10以内的值(0-9),可以通过除10取余的方式:rand( )%10;
同理,若要得到n以内的值(0,n-1), 则:rand( )%n
如果想得到特点范围[x,y]的随机值,可以分成两步:
①先得到【0,y-x】的值,即y-x+1以内的值:rand( )%(y-x+1);
②加上x,即可得到【x,y】的值:rand( )%(y-x+1)+x
综上所述:在x,y之间产生k个随机数
void Random(int x,int y,int k)
{
srand(time(0));
int i;
for(i=1;i<=k;i++)
{
printf("%d ",rand( )%(y-x+1)+x)
}
}
若不进行设置,系统默认为种子为1,那么每次运行程序产生的随机数是一样的;
通过void srand(unsigned int seed)来设置种子
为了使每次运行程序产生的一组随机数不一样,就要同步改变种子的值
因为系统时间每个时刻都不一样,所以可以利用time(0)获取系统时间作为种子
所以: srand (time(0))可以实现随机数的不可预见性
2.控制随机数产生的范围
rand( )的原始范围是(0,RAND_MAX),RAND_MAX的值包含在头文件stdlib.h当中;
若要得到10以内的值(0-9),可以通过除10取余的方式:rand( )%10;
同理,若要得到n以内的值(0,n-1), 则:rand( )%n
如果想得到特点范围[x,y]的随机值,可以分成两步:
①先得到【0,y-x】的值,即y-x+1以内的值:rand( )%(y-x+1);
②加上x,即可得到【x,y】的值:rand( )%(y-x+1)+x
综上所述:在x,y之间产生k个随机数
void Random(int x,int y,int k)
{
srand(time(0));
int i;
for(i=1;i<=k;i++)
{
printf("%d ",rand( )%(y-x+1)+x)
}
}
相关文章推荐
- LVS-DR
- Hibernate使用count(*)得到数据总数
- goAhead 2.5 嵌入式web服务器 移植到 ARM 板上
- 将字符串按字符个数切割成数组
- Spark调研笔记第6篇 - Spark编程实战FAQ
- D3js-API介绍【中】
- Bluetooth--- android 蓝牙通信编程
- Android屏蔽后退键
- IOException while loading persisted sessions
- osg窗口的创建(三)
- windows下apk查看工具的原理
- D3js-API介绍【中】
- STL --> map容器
- 水题NYOJ1071【不可以!】
- locate和find命令
- 基于am3358的蜂鸣器测试
- 基于am3358的蜂鸣器测试
- 代理模式原理及实例讲解
- Android使用StaticLayout实现文本绘制自动换行
- June。。。。。。