最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++中的偽隨機數(shù)

 更新時間:2022年07月20日 10:06:19   作者:舒泱  
這篇文章主要介紹了C++中的偽隨機數(shù),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

真隨機數(shù)

自然界中的有很多不確定的物理現(xiàn)象,通過測量這些現(xiàn)象,就可以獲得真隨機數(shù)。

比如白噪聲的幅值、電子元器件的電壓噪聲等,真隨機數(shù)可以通過用硬件對這些參數(shù)進行采集獲得。

偽隨機數(shù)

偽隨機數(shù)序列是用確定性的算法計算出來的周期很長的序列。

程序的運行過程是一個確定的過程,每一條指令都是確定的,因此不能產(chǎn)生真的隨機數(shù)。       

說到偽隨機數(shù)就會說到種子,什么是種子呢,我們可以將種子理解為一個初始值,特定算法根據(jù)這個初始值產(chǎn)生一個一定的序列,生成的這個序列“看起來”是隨機的,實際上是一個周期很長的確定序列。

如果每次的種子設(shè)置得相同,那么產(chǎn)生的序列都是相同的。       

舉個例子

我們可以簡單的設(shè)置這個種子為某個數(shù),比如1。

請看如下代碼,用srand()設(shè)置種子的值,用rand()產(chǎn)生偽隨機數(shù)序列,需要包含頭文件#include <stdlib.h>。重復(fù)運行下列代碼,因為種子相同,所以每次輸出的序列都是如圖的序列"41 18467 6334 26500 …"。

srand(1);   // 設(shè)置種子的值為1,如果不設(shè)置,默認(rèn)種子為1
for (int i = 0; i < 10; ++i) {
    cout << rand() << " ";	// 輸出10個偽隨機數(shù)
}

如果每次種子設(shè)置得不同,那生成的序列也將不同。 如何獲得不同的種子呢?       

可以用C語言中的庫函數(shù) time_t time(time_t *seconds) 返回自1970-01-01 00:00:00 UTC 起經(jīng)過的時間,以秒為單位。

這個函數(shù)的入?yún)econds也能保存結(jié)果,請看如下代碼,輸出的t和seconds的值是一樣的。

    time_t seconds;
    time_t t=time(&seconds);
    cout << t <<" "<< seconds <<endl;  // t和seconds的值是一樣的

那么,我們將當(dāng)前的時間設(shè)置為種子,由于時間一直在變,種子就一直在變,每次就能生成不同的偽隨機數(shù)序列。

time_t t=time(nullptr);
srand(t);   // 設(shè)置種子的值為時間
for (int i = 0; i < 10; ++i) {
    cout << rand() << " ";
}

C++代碼示例

題目

將1-100的有序序列變成無序序列,要求每次運行的結(jié)果不同。

// 題目:將1-100的有序序列變成無序序列,要求每次運行的結(jié)果不同。
void fun(vector<int> &vec) {
    time_t t = time(nullptr);
    srand(t);   // 設(shè)置種子的值為時間
    rand();
    for (int i = 0; i < 500; ++i) {
        // 每次隨機交換數(shù)組中的兩位
        swap(vec[rand() % 100], vec[rand() % 100]);
    }  
}
int main() {
    vector<int> vec(100);
    for (int i = 0; i < 100; ++i) {
        vec[i] = i+1;
    }
    fun(vec);
    for (auto it : vec) {
        cout << it << " ";
    }
    cout << endl;
    system("pause");
}

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。 

相關(guān)文章

  • 深入解析C++中派生類的構(gòu)造函數(shù)

    深入解析C++中派生類的構(gòu)造函數(shù)

    這篇文章主要介紹了深入解析C++中派生類的構(gòu)造函數(shù),是C++入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-09-09
  • C++實現(xiàn)加減乘除計算器

    C++實現(xiàn)加減乘除計算器

    這篇文章主要為大家詳細(xì)介紹了C++實現(xiàn)加減乘除計算器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下<BR>
    2022-01-01
  • Clion下載安裝使用的詳細(xì)教程(Win+MinGW)

    Clion下載安裝使用的詳細(xì)教程(Win+MinGW)

    這篇文章主要介紹了Clion下載安裝使用教程(Win+MinGW),本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-08-08
  • C++之智能指針初步及棄用auto_ptr的原因分析

    C++之智能指針初步及棄用auto_ptr的原因分析

    這篇文章主要介紹了C++之智能指針初步及棄用auto_ptr的原因分析,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • C++有限狀態(tài)機實現(xiàn)詳解

    C++有限狀態(tài)機實現(xiàn)詳解

    這篇文章主要為大家詳細(xì)介紹了C++有限狀態(tài)機的相關(guān)資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • 淺談C++高并發(fā)場景下讀多寫少的優(yōu)化方案

    淺談C++高并發(fā)場景下讀多寫少的優(yōu)化方案

    本文主要介紹了淺談C++高并發(fā)場景下讀多寫少的優(yōu)化方案,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • 查找算法之二分查找的C++實現(xiàn)

    查找算法之二分查找的C++實現(xiàn)

    今天小編就為大家分享一篇關(guān)于查找算法之二分查找的C++實現(xiàn),小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • C++ Boost EnableIf函數(shù)使用介紹

    C++ Boost EnableIf函數(shù)使用介紹

    Boost是為C++語言標(biāo)準(zhǔn)庫提供擴展的一些C++程序庫的總稱。Boost庫是一個可移植、提供源代碼的C++庫,作為標(biāo)準(zhǔn)庫的后備,是C++標(biāo)準(zhǔn)化進程的開發(fā)引擎之一,是為C++語言標(biāo)準(zhǔn)庫提供擴展的一些C++程序庫的總稱
    2022-11-11
  • C/C++實現(xiàn)獲取系統(tǒng)時間的示例代碼

    C/C++實現(xiàn)獲取系統(tǒng)時間的示例代碼

    C 標(biāo)準(zhǔn)庫提供了 time() 函數(shù)與 localtime() 函數(shù)可以獲取到當(dāng)前系統(tǒng)的日歷時間。本文將通過一些簡單的示例為大家講講C++獲取系統(tǒng)時間的具體方法,需要的可以參考一下
    2022-12-12
  • C語言函數(shù)指針與回調(diào)函數(shù)的實現(xiàn)

    C語言函數(shù)指針與回調(diào)函數(shù)的實現(xiàn)

    本文主要介紹了C語言函數(shù)指針與回調(diào)函數(shù)的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05

最新評論

高雄县| 白河县| 宁强县| 渭源县| 洪雅县| 古交市| 江陵县| 新宁县| 商水县| 化德县| 丹凤县| 高淳县| 嘉峪关市| 南投市| 曲沃县| 大石桥市| 马尔康县| 汉源县| 通州区| 资兴市| 大方县| 连平县| 高密市| 南通市| 鸡泽县| 德阳市| 确山县| 南开区| 金阳县| 肃宁县| 鹤庆县| 灵川县| 木兰县| 正安县| 包头市| 邢台市| 云龙县| 沙河市| 洞口县| 深泽县| 江山市|