怎么用C语言或者C++在自己规定的范围内,比如在(1,5,9,3,7)这五个数内产生一个随机数.

C++语言或C中,怎么实现随机产生一个数,在自己规定的范围内,比如在(1,5,9,3,7)这五个数内产生一个随机数.
每次程序运行的结果都不一样 rand ,最好把源程序整段发上来,求高手@@

void main()
{
int m = 5; //数组下标的结束
int n = 0; //数组下标的开始
int x = 0;
int a[5] = {1,3,5,7,9};
for(int i = 0 ; i < 20 ; i++)
{
x = rand()*(m-n)/RAND_MAX+n;
cout << a[x] << endl;
}
}
如果需要产生n到m范围内的随机整数,可以:
int ans=rand()*(m-n)/RAND_MAX+n; //算法
在vs平台下运行通过的,你也可以用枚举变量来实现。追问

m-n=5 数组下标不是才到4吗?a[0]~a[4],
程序运行时没错, x = rand()*(m-n)/RAND_MAX+n;是实现由0到5的随机数吧。这个小地方不懂
还有就是怎么实现每次的运行结果不一样,详细点,我知道用srand,不过调了好久没弄出来

追答

嗯,你这个问题我也想过,后来测试了一下,如果是0到4,你会发现随机数据里面没有9,如果是1到5,你也会发现没有1的出现,当然,我也试过越界的情况,输出了随机数据很大,具体的情况你可以自己试试。至于为什么,就要去看看算法是怎样实现的,O(∩_∩)O~(rand生成的范围为 [0, 范围数组的长度])

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-01-24
定义一个随机数生成器可以生成0~n之间的随机数,接着用这在随机数挑选自己给定的数
给个例子:
#include<stdio.h>
#include<stdlib.h>
#include<process.h>

double Rodom_0_1(){
return 1.0*rand()/(RAND_MAX + 1);}
int RandInt(int low,int high)
{ return(int)( random_0_1()*(high-low)) low;
}
int userRand(int*a,int n){
return a[RandInt(0,n)];}
int a[5]={1,5,9,3,7};
int main(){
srand(getpid()+time(NULL));
printf(”%d“,userRand(a,5);
return 0;
}
第2个回答  2013-01-23
将你想要产生的数放在一个数组里。
然后用rand生成随机数,rand生成的范围为 [0, 范围数组的长度]。
然后,用生成的这个数去数组中获得数据。

简单来说,就是生成的随机数是 索引
第3个回答  2013-01-23
可以用一个数组记录范围,再打乱,取出第一个就OK
int v[5] = {1, 5, 9, 3, 7};
srand(GetTickCount());
for (int i = 0; i < 5; ++i)
{
int x = rand() % 5;
int y = rand() % 5;
swap(v[x], v[y]);
}
int r = v[0];
这里,r就是产生的在规定范围内的随机数
第4个回答  2013-01-23
int a[] = {1,5,9,3,7};
a[rand()%5];
第5个回答  2013-01-23
取随机数,如果是1,输出1,2输出5,3输出9,4输出3,5输出7,很简单的。

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网