Qt 随机数生成

目录

QT生成随机数

Qt生成随机数,不重复的随机数,递增随机数

QT5 定时器的使用

QT生成随机数

https://www.cnblogs.com/xiaolanchong/p/7528187.html

QT生成随机数和C语言差距不大,C语言用srand()和rand(),QT是用Qsrand()和qrand();

QT生成随机数的格式是:

qsrand(QTime(0,0,0).secsTo(QTime::currentTime()));
qrand();

这里因为有QTime()所以要加头文件#include<QTime>,而qsrand和qrand这两个函数则在#include <QtGlobal>里。

qsrand用来设置一个种子,该种子为qrand生成随机数的起始值。如果不用qsrand设置种子 会导致每次运行程序 得到的随机数一样。

 void get_random_number()
 {
     qsrand(QTime(0,0,0).secsTo(QTime::currentTime()));
     int a = qrand()%9;   //随机生成0到9的随机数
     qDebug()<< a;
 }

QT5 定时器的使用

https://blog.csdn.net/iXiaochu/article/details/97154032

Qt产生随机数

1. 概述

随机数就是就随机数种子中取出的数。

种子就是个序号,这个序号交给一个数列管理器,通过这个序号,你从管理器中取出一个数列,这个数列就是你通过那个序号得到的随机数。

但这个随技术并不真正随机。因为它是通过某个算法的得到。也就是说你给数列管理器同一个序号将得到同样一个“随机”数列。也就是说种子和随机数列是一一对应的。

{An}=f(x), x 就是种子,F()是算法,{An}是数列,这个数列看上去是随机的,这是因为An的通项很复杂。

例如:从1、2、3、4、5、6、7、8、9、0这十个数中随机取出一个数,取出的数是6的话,那么6就叫随机数。十个数字就叫随机数种子。如果是从1到50之间取数字,取出的数字叫随机数,这1到50那50个数字就叫随机数种子。

————————————————

版权声明:本文为CSDN博主「十年编程老舅」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/m0_73443478/article/details/128836507

Qt 随机数生成: QRandomGenerator

Qt 随机数生成

Qt 5.10 后,使用  QRandomGenerator  生成随机数。

这里只介绍一个函数QRandomGenerator::bouonder(),如下图所示:

注意,bounded()函数中返回的数不包括参数中的上限值。

https://blog.csdn.net/null_plus/article/details/123896610?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-0-123896610-blog-125426707.pc_relevant_3mothn_strategy_and_data_recovery&spm=1001.2101.3001.4242.1&utm_relevant_index=3

Qt生成随机数,不重复的随机数,递增随机数  

其实,所谓的随机数只是一种绝对理想状态下的随机数,计算机生成的随机数即是随机的又是有规律的:

比如:

    srand(1);
    for(int i = 0; i < 10; ++i)
    {
        int nRandNum = rand % 10;
        cout << nRandNum ;
    }

这个生成的随机数是 [0,10)之间的一个数,每次输出都是一样的序列,那么如何让每次输出的序列不一样呢?

利用系统时间,代码如下:

    int nSeed= QDateTime::currentDateTime().time().second();
    srand(nSeed);
    for(int i =0; i < 10; ++i)
    {
        int nRandNum = (rand()%10)+80;
    cout << nRandNum ; 
}

秒是实时生成的,所以nSeed也会变,这就使每次输出的序列不一样。

生成随机数

在Qt中,生成随机数主要用到了函数qsrand和qrand,这两个函数在#include 中,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 nNum=qrand()%10;  
        qDebug() << nNum;  
    }  
}  

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

生成不重复的随机数

重复与否需要自己做判断。

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

生成递增的随机数

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

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

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

0 1 1 3 4 4 6 7 7 9

————————————————

版权声明:本文为CSDN博主「MrHHHHHH」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/MrHHHHHH/article/details/128040023

Qt产生指定范围内随机数(随机字符串)

1.目的

  在编写QT项目时,产生随机数和随机字符串是十分常见的需求,使用qrand函数就能够实现,但是如果不使用种子的话,产生的随机数并不是真正的随机数,而是固定的数字。通常情况下,我们会使用当前时间作为随机数的种子,以产生真正意义上的随机数

2.生成指定范围随机数

Qt产生随机数代码如下:

int getRandom(int min,int max)
{
    qsrand(QTime(0, 0, 0).secsTo(QTime::currentTime()));
    int num = qrand()%(max-min);
    qDebug()<<num+min;
}

3.生成不重复的随机数组(这个例子优点 bug)

将产生的随机数存放到数组中,在每次产生新的随机数的同时,在随机数列表中检查是否包含该数

如果包含则重新生成,直到生成新的随机数为止。

int getRandom(int min,int max)
{
    QList<int> list;
    int i,j;
    bool res = true;
    qsrand(QTime(0, 0, 0).secsTo(QTime::currentTime()));
    for (int i=0; i<10; i++) {
        int num = qrand()%(max-min)+min;
        list.append(num);
        while(res)
        {
            for(j=0;j<i;j++)
            {
                if(list[i]==list[j])
                    break;
            }
            if(j<i)
            {
                list[i] = qrand()%(max-min)+min;
            }
            if(j==i)
                res=!res;
        }
    }
}

4.产生随机字符串

产生随机字符串代码如下:

QString getRandomString(int length)
{
    qsrand(QDateTime::currentMSecsSinceEpoch());
    const char ch[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
    int size = sizeof(ch);
    char* str = new char[length + 1];
    int num = 0;
    for (int i = 0; i < length; ++i)
    {
        num = rand() % (size - 1);
        str[i] = ch[num];
    }
    QString res(str);
    return res;
}

————————————————

版权声明:本文为CSDN博主「欧特克_Glodon」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/m0_37251750/article/details/125426707

Qt生成随机数的方法

https://blog.csdn.net/caoshangpa/article/details/51036267

1.生成随机数

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

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

2. 生成不重复的随机数

3.生成递增的随机数

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

————————————————

版权声明:本文为CSDN博主「草上爬」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/caoshangpa/article/details/51036267

qt产生一个范围内的随机数

使用函数 qrand()

例如:产生100~200以内的随机数

则可以理解为产生0~100以内的随机数再加上100,即0~100+100

代码:

//例1:产生100~200以内
int num=qrand()%100+100;
//例2:产生23~88以内(为什么是23到88,我也是随机说的一个范围)
int num=qrand()%(88-23)+23;

————————————————

版权声明:本文为CSDN博主「sxczzZ」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/sxczzZ/article/details/128899421

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值