亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

srand() - 為什么只調用一次?

srand() - 為什么只調用一次?

幕布斯6054654 2019-05-24 16:23:54
srand() - 為什么只調用一次?這個問題是關于這個問題的評論 推薦的方法來初始化srand?第一條評論說srand()應該只在應用程序中調用ONCE。為什么會這樣?
查看完整描述

4 回答

?
www說

TA貢獻1775條經驗 獲得超8個贊

簡短的回答:通話srand()喜歡“擲骰子”隨機數發生器。也不像洗牌一樣。如果有的話,更像是切割一副牌。

想想這樣。 rand()從一大堆卡片開始交易,每次你打電話,它所做的就是從牌組頂部挑出下一張牌,給你價值,并將牌返回到牌組的底部。(是的,這意味著“隨機”序列會在一段時間后重復出現。但這是一個非常大的套牌:通常是4,294,967,296張牌。)

此外,每一個程序運行時,卡一個全新的包從游戲商店買,卡每一個全新的包總是具有相同的序列。因此,除非你做一些特殊的事情,否則每次你的程序運行時,都會得到完全相同的“隨機”數字rand()。

現在,你可能會說,“好吧,那我怎么洗牌?” 答案是(至少就randsrand關注),沒有洗牌甲板的一種方式。

那怎么srand辦?根據我在這里建立的類比,打電話srand(n)基本上就像是說“ n從頂部切下卡牌”。但是等一下,還有一件事:它實際上需要另一個全新的套牌,并n從頂部切下卡片。

所以,如果你打電話srand(n),rand()srand(n),rand(),...,用相同的n每一次,你不會只是得到一個不是非常隨機序列,你就會得到相同數量的從后rand()每次。(不一定是你遞給的號碼srand,但rand反復使用相同的號碼。)

所以,你能做的最好的就是削減甲板上一次,也就是調用srand()一次,在程序的開始,用n這相當隨機的,所以你會在不同的隨機發生在大甲板每次啟動程序運行。

[PS是的,我知道,在現實生活中,當你購買一副全新的卡片時,它通常是有序的,而不是隨機順序。對于這里的類比,我想象你從游戲商店購買的每個牌組都是看似隨機的順序,但是與你在同一商店購買的其他牌組完全相同的看似隨機的順序。有點像他們在橋牌錦標賽中使用的相同洗牌的牌組。]


查看完整回答
反對 回復 2019-05-24
  • 4 回答
  • 0 關注
  • 2048 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號