主题:怎样生成1到6随机数?
_超.C
[专家分:10] 发布于 2010-11-27 11:32:00
请大家指点:怎样生成有上界和有下界的随机数,怎样设置上界和下界.
求帮助,大恩不言谢.
回复列表 (共7个回复)
沙发
bruceteen [专家分:42660] 发布于 2010-11-27 12:31:00
#include <stdio.h>
#include <stdlib.h>
int myrand( int lv, int hv ) // 产生[lv,hv]区间内的随机数
{
return (int)( lv+rand()*(double)(hv-lv+1)/(RAND_MAX+1) );
}
int main()
{
srand( 0 );
for( int i=0; i<100; ++i )
{
printf( "%d ", myrand(1,6) );
}
return 0;
}
板凳
Gooluckd [专家分:20] 发布于 2010-11-27 14:54:00
#include <iostream>
#include <time.h>
#include <stdlib.h>
using namespace std;
int main()
{
srand(time(NULL));
int array[10]; //[]里的数代表一次产生随机数的个数
for(int j=0;j<10;j++)
{
for(int i=0; i<10;i++)
{
array[i]=rand()%6+1; //产生[1,6]随机数
cout<<array[i]<<" ";
}
cout<<endl;
cin.get();
}
}
要是想用C的话,把cout改成printf,加个conio的头文件就好了,
3 楼
_超.C [专家分:10] 发布于 2010-11-28 11:39:00
怎样生成50到100之间的随机数呢
4 楼
_超.C [专家分:10] 发布于 2010-11-28 11:40:00
我还是不知道怎样设置下界。生成的随机数只能从1开始。求指点
5 楼
dongyuanxun [专家分:7180] 发布于 2010-11-28 12:13:00
[quote]怎样生成50到100之间的随机数呢[/quote]
变通一下,产生0-50的随机数,然后加50
6 楼
qtwg [专家分:30] 发布于 2010-11-28 14:30:00
#include "stdio.h"
#include "stdlib.h"
#include "time.h"
void main()
{
int i,a[100]={0};
srand(time(0));
for(i=0;i<100;i++)
{
a[i]=rand()%50+50;
printf("%4d",a[i]);
}
}
#hinclude "stdlib.h"
#include "time."
这两行一定要加入
若srand(time(0));不加,楼主运行一下就会发现,每次结果都一样
7 楼
cfj469933485 [专家分:950] 发布于 2010-11-28 20:00:00
#include <stdio.h>
#include <stdlib.h>
#define MAX 10
int myrand( int lv, int hv ) // 产生[lv,hv]区间内的随机数
{
return (int)( lv+rand()*(double)(hv-lv+1)/(RAND_MAX+1) );
}
int main()
{
int m, n;
srand( 0 );//我个人认为写完整得好,srand((unsigned)time(NULL));
printf("请输入随机数的上界:");
scanf("%d", &m);
printf("请输入随机数的下界:");
scanf("%d", &n);
if(m <= n && n >= 0)
{
for( int i=0; i<MAX; ++i)
{
printf( "%d ", myrand(m,n) );
}
}
else
{
printf("随机数的上下界输入有误!\n");
}
printf("\n");
return 0;
}
不好意思,没经一楼的同意,就拿一楼的程序来解释,这里说声抱歉。
一楼的程序写得能动性很强。
我修改下,来解释。
(int)( lv+rand()*(double)(hv-lv+1)/(RAND_MAX+1) );
我们一步步来,拿数值来说明好理解一点
如传进来的数值是,lv = 1, hv = 6
(hv - lv + 1)= 6
rand()范围:0~RAND_MAX
转为double型
(double)(hv-lv+1) = 6.0
rand()*(double)(hv-lv+1); 属于 [0.0, 6*RAND_MAX]
rand()*(double)(hv-lv+1)/(RAND_MAX+1) );属于[0.0,6)
( lv+rand()*(double)(hv-lv+1)/(RAND_MAX+1) );属于[1.0, 7)
转为int型
(int)( lv+rand()*(double)(hv-lv+1)/(RAND_MAX+1) );//,舍弃小数点后面的值,属于[1, 6]
不知道我这么写楼主明白不
我来回复