c++獲取隨機數


 方法一:

  使用 rand 函數可以獲取,如下。 

  

  隨機數大小是在0到RAND_MAX,值為2147483647,它是在stdlib中定義的,如果我們希望在某個范圍內,可以使用 % 結合 / 來實現

  但是不難發現,這里獲得的隨機數是唯一確定的,而不是變化的。所以,如果我們希望獲得變化的隨機數,可以使用下面的方法。

 

 

 

方法二:

  既然使用rand函數無法獲取到變化的隨機數,這里就可以使用srand來實現了。

#include<iostream>
#include<ctime>
using namespace std;
int main()
{
    srand(time(0));
    for (int i = 0; i < 1000; i++)
    cout << rand() << endl;
    return 0;
}

  這里,我們需要引入ctime庫,其中time(0)是獲取從1970年開始的時間(單位:s),然后再獲取rand(),這時的rand就是隨機變化得了。 如下:

    

 

 但這里獲取的值是不確定的,而如果我們希望獲得在某一范圍內的值呢,也很簡單,如下所示:

#include<iostream>
#include<ctime>
using namespace std;
int main()
{
    srand(time(0));
    for (int i = 0; i < 100; i++)
    cout << rand() % 100 << endl;
    return 0;
}

如上,使用求余數的方法,我們可以獲得0 - 100之間的值。

 

而如果我們希望得到0 -  1之間的數呢? 如下所示:

#include<iostream>
#include<ctime>
using namespace std;
int main()
{
    srand(time(0));
    for (int i = 0; i < 100; i++)
        cout << (rand() % 10) * 0.1 << endl;
    return 0;
}

 

 

而我們希望得到-1 到 1 之間的數呢?

#include<iostream>
#include<ctime>
using namespace std;
int main()
{
    srand(time(0));
    for (int i = 0; i < 100; i++)
      if (i % 2 == 0)
        cout << (rand() % 10) * 0.1 << endl;
      else 
        cout << (rand() % 10) * -0.1 << endl;
    return 0;
}

 

 

上面的程序雖然可以得到正隨機數和負隨機數,但是是交替出現的,還是不夠隨機,所以我們可以采用下面的方式:

 

#include<iostream>
#include<ctime>
using namespace std;
int main()
{
    srand(time(0));
    double a;
    for (int i = 0; i < 100; i++)
    if (rand() % 10 > 0.4)
    {
        cout << (rand() % 10) * 0.1 << endl;
    }
    else
    {
        a = (rand() % 10) * -0.1;
        if (a == -0.0)
        {
            cout << 0 << endl;
        }
        else
        {
            cout << a << endl;
        }
    }
    return 0;
}

這樣,我們就可以得到真正的隨機數了,后面使用 a == -0.0 判斷是為了防止輸出 -0 的情況。 最終結果如下:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM