关于随机数的送分问题!

No9 2001-10-29 11:50:10
请教高手们:在Windows下面如何使用随机数呢?
还是和DOS下面一样使用rand()函数吗?还是有什么标准的API函数?
...全文
221 18 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
No9 2001-11-01
  • 打赏
  • 举报
回复
谢谢各位的参与!
尤其是 jason802(小糊涂仙) 老兄,谢谢你一针见血的指出的问题的实质!
至于设定范围的方法有很多种的,我也会找到一种比较好的方法!
No9 2001-10-31
  • 打赏
  • 举报
回复
各位,为什么会产生一个超过 srand(m_uWidth) 中参数的随机数呢?
srand(m_uWidth) 函数不是指定产生一个 〔0-m_uWidth〕 之间的随机数吗?
不会是我理解错了吧!
cntiger 2001-10-31
  • 打赏
  • 举报
回复
在计算机上产生都是伪随机数,它是根据公式算出来的。如果每次种子相同,则会得到相同的
随机数序列,起不到很好的作用。
正常用法是:
srand( (unsigned)time( NULL ) ); //取时间为种子
rand();
目前还没有增加随机性的简单方法。



A_Qiao 2001-10-31
  • 打赏
  • 举报
回复
The rand function returns a pseudorandom integer in the range 0 to RAND_MAX. Use the srand function to seed the pseudorandom-number generator before calling rand.

RAND_MAX = OX7FFF in VC++
jason802 2001-10-31
  • 打赏
  • 举报
回复
唉,这个帖子持续了这么多天,我都忘了,有跳出来了,和和,这下说清楚了吧?
jason802 2001-10-31
  • 打赏
  • 举报
回复
兄弟,你理解错了,srand(x),是取x为种子去计算随机数,随机数的大小为0~RAND_MAX(这个数=16进制0x7fff),你要取0~m_nWidth之间的随机数,就这样
int x = rand()%(m_nWidth+1)
  • 打赏
  • 举报
回复
srand是设置随机数的种子,是不会设置范围的。你可以对随机数处理一下,就可以得到你要的范围了。
Happy_Wawe 2001-10-31
  • 打赏
  • 举报
回复
msdn里的例子是这样的:

srand( (unsigned)time( NULL ) ); //取时间为种子
rand();

这样才是真正的随机。
No9 2001-10-31
  • 打赏
  • 举报
回复
没有高手了吗?
怎么这么简单的问题都没有人回答呀!
Fantastic_hu 2001-10-29
  • 打赏
  • 举报
回复
用rand()把,如果要设置范围的化就取余
langjingling 2001-10-29
  • 打赏
  • 举报
回复
一样可以用
jason802 2001-10-29
  • 打赏
  • 举报
回复
就用rand()函数.没别的了.
feelinn 2001-10-29
  • 打赏
  • 举报
回复
使用时间作为种子来取随机数.一定要选不同的种子,否则每次都一样.就不是随机数了.
No9 2001-10-29
  • 打赏
  • 举报
回复
To jason802(小糊涂仙):
我想说的是为什么我设置的srand()函数没有起作用呀?

因为明明已经将 m_uWidth=40 了,但使用 srand(m_uWidth) 后结果为什么会产生一个超过m_uWidth(40)的随机数呢?
jason802 2001-10-29
  • 打赏
  • 举报
回复
确实没有什么新的API函数用来取随机数,因为rand()完全可以运行的很好了。
也许你在使用rand()函数的时候发现每次运行程序得到的随机数总是差不多大,其实你用同一个随机数种子多rand()几次就好了,rand()的次数越多,数据越随机。因为rand()也是机器的一种算法,所以不可能是真的随机的。所以建议你这样干。随机性就会大大增强:
方法一:
UINT m_uWidth=40;
srand(m_uWidth);
rand();
rand();
x = rand(); //第三次调用随机性就很大了
srand(x); //再用随机数作为种子
x = rand(); //这样就很随机了

方法二:

srand( (unsigned)time( NULL ) ); //取时间为种子

for( i = 0; i < 10;i++ )
rand();

int x = rand(); //取第11个随机数为自己所用,非常随机了。
No9 2001-10-29
  • 打赏
  • 举报
回复
另外在Windows系统下rand()函数好像有点问题?
我使用下面的代码:
UINT m_uWidth=40;
srand(m_uWidth);
int x=rand(); 或者 int x=(BYTE)rand(); 或者 int x=(WORD)rand();
结果却产生一个很大的数,好几百的,每次都是,为什么呢?
是不是rand()函数在Windows下不兼容呀?

我的系统是Windows2000中文版!
No9 2001-10-29
  • 打赏
  • 举报
回复
难道说Windows系统没有什么Win32 API吗?
TalentSprite 2001-10-29
  • 打赏
  • 举报
回复
用srand()设置随机种子,再用rand()取随机数。注意rand()是伪随机,如果srand()设置不变,
rand()在程序每次重新执行后的值相等。

16,548

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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