| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 697 人关注过本帖
标题:想请问一个关于 C++ 产生随机数的问题,代码已完成,还有一点小麻烦。
只看楼主 加入收藏
yangfrancis
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:贵宾
威 望:141
帖 子:1510
专家分:7661
注 册:2014-5-19
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:4 
想请问一个关于 C++ 产生随机数的问题,代码已完成,还有一点小麻烦。
这是在网上看到的代码,我没有完全复制,但核心思想应该没有出入。这段代码以系统的时间作为srand()函数的种子,以此来产生一个随机数。只是不知道为什么每次执行时第一个随机数总是没有变化,并且永远是“上限-1”。也就是说,若在0~10之间取随机数,第一个产生的永远是9.到底为什么?望各位大侠解答。在此感谢。
#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;
double random(double start,double end)
{
    return start+(end-start)*rand()/(RAND_MAX+1.0);
}
int main()
{
    srand(unsigned(time(0)));
    for(icnt=1;icnt<=10;icnt++)
    {
        cout<<int(random(0,10))<<endl;//在1到10之间取随机数
    }
    return 0;
}
搜索更多相关主题的帖子: include double return start 网上 
2014-05-25 22:32
yangfrancis
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:贵宾
威 望:141
帖 子:1510
专家分:7661
注 册:2014-5-19
收藏
得分:0 
刚才自己又测试了一下。发现第一个返回值不一定是“上限-1”,但在连续返回多次的情况下一定是一个固定值。请教是怎么回事,是否跟即时的系统时间有关系?
2014-05-25 22:50
harecn
Rank: 2
等 级:论坛游民
帖 子:1
专家分:13
注 册:2013-10-15
收藏
得分:13 
#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;

int main()
{
     srand(unsigned(time(0)));
     int icnt;
     for(icnt=1;icnt<=10;icnt++)
        {
            cout<<int(rand()%10)<<endl;//在1到10之间取随机数
        }
 return 0;
}
2014-05-25 23:29
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:7 
計算機的隨機數是偽隨機數,是用一個算法生成的,衹要第一個數相同,那麽永遠得到同一個數列串。因此,要得到不同的數列串,就要用不同的第一個數,而這個數必須足夠“隨機”,通常使用時鐘,因爲計算機每次運行計算這第一個數的時刻未必會一樣,那是足夠隨機的。使用C庫的隨機數生成函數,必須用隨機數初始化算法的種子(即第一個數),方法如前所述,未必一定要用時鐘,用鍵盤按鍵、硬件中斷(消息)等,也是可以的,關鍵是獲得的數被視爲足夠隨機,不容易重複得到即可。

授人以渔,不授人以鱼。
2014-05-25 23:48
yangfrancis
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:贵宾
威 望:141
帖 子:1510
专家分:7661
注 册:2014-5-19
收藏
得分:0 
harecn的代码解决问题了,虽然还是不太明白原来的代码问题出在哪里,但随机性的问题算是解决了。谢谢各位。
2014-05-26 14:56
快速回复:想请问一个关于 C++ 产生随机数的问题,代码已完成,还有一点小麻烦。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.021615 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved