Qt生成随机数的方法

目录
  • 1.生成随机数
  • 2.生成不重复的随机数
  • 3.生成递增的随机数

1.生成随机数

        生成随机数主要用到了函数qsrand和qrand,这两个函数在#include <QtGlobal>中,qsrand用来设置一个种子,该种子为qrand生成随机数的起始值。比如说qsrand(10),设置10为种子,那么qrand生成的随机数就在[10,32767]之间。而如果在qrand()前没有调用过qsrand(),那么qrand()就会自动调用qsrand(1),即系统默认将1作为随机数的起始值。使用相同的种子生成的随机数一样。

       下列代码生成了[0,9]之间的10个随机数。

void generateRandomNumber()
{
    qsrand(QTime(0,0,0).secsTo(QTime::currentTime()));
    for(int i=0; i<10; i++)
    {
        int test =qrand()%10;
        qDebug()<<test;
    }
}

        注意代码中使用的种子,这里没有用固定值来作为种子,是希望函数在每次调用(间隔大于1秒)时生成的随机数不一样。

2.生成不重复的随机数

        这个没有特别好的方法,需要自己手动计算,代码如下。

void generateUniqueRandomNumber()
{
    int i,j;
    QList<int> numbersList;
    qsrand(QTime(0,0,0).secsTo(QTime::currentTime()));
    for(i=0;i<10;i++)
    {
        numbersList.append(qrand()%10);
        bool flag=true;
        while(flag)
        {
            for(j=0;j<i;j++)
            {
                if(numbersList[i]==numbersList[j])
                {
                    break;
                }
            }
            if(j<i)
            {
                numbersList[i]=rand()%10;
            }
            if(j==i)
            {
                flag=!flag;
            }
        }
    }
    for(i=0;i<10;i++)
    {
        qDebug()<<numbersList[i];
    }
}

3.生成递增的随机数

        就是在随机数生成后进行排序,Qt提供了一个非常好用的排序函数qSort,详细的用法可参考Qt帮助。

void generateAscendRandomNumber()
{
    int i;
    QList<int> numbersList;
    qsrand(QTime(0,0,0).secsTo(QTime::currentTime()));
    for(i=0;i<10;i++)
    {
        numbersList.append(qrand()%10);
    }
    qSort(numbersList.begin(),numbersList.end());
    for(i=0;i<10;i++)
    {
        qDebug()<<numbersList[i];
    }
}

        输出结果如下所示,可以看出qSort默认递增排序,即使数列中包含相同的数。

到此这篇关于Qt生成随机数的方法的文章就介绍到这了,更多相关Qt 随机数内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Qt定时器和随机数详解

    环境是:Windows 7 + Qt 4.8.1 +Qt Creator 2.4.1 一.定时器 Qt中有两种方法来使用定时器,一种是定时器事件,另一种是使用信号和槽.一般使用了多个定时器时最好使用定时器事件来处理. 1.新建Qt Gui应用,项目名称为myTimer,基类选择QWidget,类名为Widget. 2.到widget.h文件中添加函数声明: protected:     void timerEvent(QTimerEvent *); 然后添加私有变量定义: int id1, id

  • Qt生成随机数的方法

    目录 1.生成随机数 2.生成不重复的随机数 3.生成递增的随机数 1.生成随机数         生成随机数主要用到了函数qsrand和qrand,这两个函数在#include <QtGlobal>中,qsrand用来设置一个种子,该种子为qrand生成随机数的起始值.比如说qsrand(10),设置10为种子,那么qrand生成的随机数就在[10,32767]之间.而如果在qrand()前没有调用过qsrand(),那么qrand()就会自动调用qsrand(1),即系统默认将1作为随机数

  • Angular+Node生成随机数的方法

    本文实例讲述了Angular+Node生成随机数的方法.分享给大家供大家参考,具体如下: 以前写过一个PHP生成随机数,然后jquey ajax获取,再jQuery改变文本的随机数的程序 现在用Angular 和 Node来重写一下 Angular的好处是双向绑定,这样直接设置变量,不用再重新设置了 Node的好处我目前还不是很理解,可以通过count这个例子来说明一下Node和PHP的不同之处 当然了,最大的好处就是,前后端都可以用JavaScript来写了,这样的话Javascript的水平

  • php简单生成随机数的方法

    本文实例讲述了php简单生成随机数的方法.分享给大家供大家参考.具体如下: <?php /** *生成随机数,可用户验证码 *@param */ function randStr($m = 5) { $new_str = ''; $str = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwsyz0123456789'; $max=strlen($str)-1; for ($i = 1; $i <= $m; ++$i) { $new_str

  • js生成随机数的方法实例

    js生成随机数主要用到了内置的Math对象的random()方法.用法如:Math.random().它返回的是一个 0 ~ 1 之间的随机数.有了这么一个方法,那生成任意随机数就好理解了.比如实际中我们可能会有如下的需要: (1)生成一个 0 - 100 之间的随机整数,那么则可以: parseInt(100*Math.random()); 注意:因为Math.random()的返回值是包括0和1的,所以这里是有生成0和100的可能性的. (2)生成一个从 m - n 之间的随机整数,例如要生

  • PHP生成随机数的方法实例分析

    通常情况下,当我们要生成一个随机字符串时,总是先创建一个字符池,然后用一个循环和mt_rand()或rand()生成php随机数,从字符池中随机选取字符,最后拼凑出需要的长度. 复制代码 代码如下: function randomkeys($length) { $pattern = '1234567890abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLOMNOPQRSTUVWXYZ,./&l t;>?;#:@~[]{}-_=+)(*&^%$?!'; //

  • Java编程实现从给定范围内随机N个不重复数生成随机数的方法小结

    本文实例讲述了Java编程实现从给定范围内随机N个不重复数生成随机数的方法.分享给大家供大家参考,具体如下: 一.JAVA中生成随机数的方式 1.在j2se中使用Math.random()令系统随机选取一个0~1之间的double类型小数,将其乘以一个数,比如25,就能得到一个0~25范围内的随机数,这个在j2me中没有: int randomNumber = (int) Math.round(Math.random()*(max-min)+min); 2.在System类中有一个current

  • JAVA 根据设置的概率生成随机数的方法

    本文介绍了JAVA 根据设置的概率生成随机数的方法,分享给大家 import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Random; public class RandomTest { // String 可以为任意类型 也可以自定义类型 static Map<String, Integer> keyChanceMap

  • C#生成随机数的方法小结

    本文实例总结了C#生成随机数的方法.分享给大家供大家参考.具体分析如下: 开始,很简单地使用System.Random类来生成随机数.很快,问题就来了,发现当random的生成间隔小于1ms时,随机数就重复了(仅限于每次都新建Random对象),因为新建random时候是默认以当前时间作为随机种子的.将random改为单例,重复数的几率小了,但是随机数在一段时间后循环了(伪随机数嘛,没办法,要求不了这么多的). 所以,特意在网上找了一些资料,并亲自作了一些性能比较,在此作些总结. System.

  • PHP生成随机数的方法总结

    第一种方法用mt_rand() function GetRandStr($length){ $str='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'; $len=strlen($str)-1; $randstr=''; for($i=0;$i<$length;$i++){ $num=mt_rand(0,$len); $randstr .= $str[$num]; } return $randstr; } $numb

  • Python内置random模块生成随机数的方法

    本文我们详细地介绍下两个模块关于生成随机序列的其他使用方法. 随机数参与的应用场景大家一定不会陌生,比如密码加盐时会在原密码上关联一串随机数,蒙特卡洛算法会通过随机数采样等等.Python内置的random模块提供了生成随机数的方法,使用这些方法时需要导入random模块. import random 下面介绍下Python内置的random模块的几种生成随机数的方法. 1.random.random()随机生成 0 到 1 之间的浮点数[0.0, 1.0).注意的是返回的随机数可能会是 0 但

随机推荐