如何控制rand的取值范围,比如控制在1~3,5~10随便给这整数的范围。

haiyanhuman 2009-03-14 12:01:24
谢谢了。急
...全文
2650 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
rand%10,就是0到9了啊,记得srand去初始化种子。
KevinYuen 2009-03-14
  • 打赏
  • 举报
回复

void RandByRange( int nStart, int nEnd, int nCount, std::vector<int>& Rec )
{
srand( ::GetTickCount() );

for( int nIndex = 0; nIndex < nCount; ++nIndex )
{
int nRandValue = rand() % ( nEnd - nStart + 1 ) + nStart;
Rec.push_back( nRandValue );

// test
cout << nRandValue << '\t';
}
}

void main()
{
std::vector<int> rec;
RandByRange( 3, 5, 10, rec );
}


按照你自己的实际需要修改参数
arong1234 2009-03-14
  • 打赏
  • 举报
回复
那就int(3*((double)rand())/((double)RAND_MAX))
[Quote=引用 3 楼 FancyMouse 的回复:]
%的话对于比较接近RAND_MAX的数,概率分布会出问题
[/Quote]
FancyMouse 2009-03-14
  • 打赏
  • 举报
回复
%的话对于比较接近RAND_MAX的数,概率分布会出问题
sagegz 2009-03-14
  • 打赏
  • 举报
回复
把需要的值放到数组中,数组下标从0到n,然后对数组大小(m)进行rand()%m
最后根据对应的下标取出数组元素的值.
lingyin55 2009-03-14
  • 打赏
  • 举报
回复
rand()%3 它的可能值为0,1,2,
给它加1后使它的可能取值为1,2,3;
太乙 2009-03-14
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 xiaoyuer5222 的回复:]
C/C++ code
strand(time(NULL));
rand()%(b-a)+a; /* 得到a到b之间的随机数 */
[/Quote]



srand

rand()%num;//产生的是0--num-1的数

lwouyang 2009-03-14
  • 打赏
  • 举报
回复
对于[a,b)的随机数,可以这样
r = a + rand()%(b-a)
记得初始化啊!
fx397993401 2009-03-14
  • 打赏
  • 举报
回复
rand()%10 是 0-9 可通过 在后面加上数字 控制范围 而域宽是像10这样的数字来控制
xxgamexx 2009-03-14
  • 打赏
  • 举报
回复
弱弱的问句

rand()的低层是如何实现的呀?
xiaoyuer5222 2009-03-14
  • 打赏
  • 举报
回复

strand(time(NULL));
rand()%(b-a)+a; /* 得到a到b之间的随机数 */
Rain208 2009-03-14
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 hairetz 的回复:]
rand%10,就是0到9了啊,记得srand去初始化种子。
[/Quote]
up
pengzhixi 2009-03-14
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 lingyin55 的回复:]
rand()%3 它的可能值为0,1,2,
给它加1后使它的可能取值为1,2,3;
[/Quote]

up
lchchl92418qwe 2009-03-14
  • 打赏
  • 举报
回复
rand()%10 他的范围是0 1 2 3 4 5 6 7 8 9;
rand()%5 范围是0 1 2 3 4;
依此类推!!!

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧