回覆列表
  • 1 # 使用者5907856278484

    我寫了一個計數的程式碼,外加統計最終的分佈機率。如果想要計時的話,可能要根據 wait until next ms 的引數再換算成時間。不過我覺得對於這個問題,可能實現計數就可以了。判斷 0 到 100 之間的隨機數是否小於10、是否10和20之間、是否20和30之間……要實現這個功能,可以像題主想的那樣用 case structure 判斷,然後對 case structure 的執行次數計數。不過我覺得,也可以直接用這個隨機數除以10,然後根據整除的結果和餘數直接判斷。比如25除以10,等於2,餘5,2 這個結果就可以判斷25位於20和30之間。再比如68,除以10,等於6餘8,根據6就可以判斷64在60和70之間。實際的執行可以用兩個 array 來實現,一個是統計次數,另一個用指示燈來顯示是或者否。while loop 裡每次迴圈生成一個隨機數,然後這個隨機數除以10,根據相除的結果,更新這兩個 array 的值。比如生成的隨機數是25,除以10的結果是2,所以就更新這兩個 array 的 index 等於 2 的那一項。對於計數的array,更新的結果是這次迴圈之前的數值再加一。對於顯示指示燈的array,更新的結果是從 false 變成 true。因為用來計數的 array 需要累加,每次迴圈都不能丟失之間的資料,所以要用 shift register。而顯示是或者否的 array,只需要實時顯示當前的這一個隨機數的狀態,所以不需要累加,每次迴圈完成都初始化成所有的都是 false,然後再判斷當前迴圈,給出array 中某一項為 true,然後迴圈完成,再全部初始化成 false。當按下 stop 之後,計數 array 存貯的是所有的隨機數的計數,而指示燈的 array 顯示的是最後一次迴圈的隨機數的情況,只有一個指示燈亮。比如上面這次執行,從開始到按下stop,之間共迴圈了5751次,每迴圈一次,某一個指示燈亮起,某一個計數項加一。0到10之間的隨機數有575個、10到20之間有578個……最後一次迴圈的隨機數是47.7807,所以40到50之間的那個指示燈是亮的。為了驗證結果,還可以在執行完成之後,把計數的這個 array 轉化為百分比。array 的每一項除以整個 array 的數值的總和,就可以得到每一項所佔的百分比。最後執行的結果是這樣的,比如迴圈了 2258039次,最終每一項的百分比都比較接近於10%,說明隨機數真的是比較隨機的。如果閒的無聊,執行的次數足夠多,每一項的機率就會越接近10%。

  • 中秋節和大豐收的關聯?
  • 新裝修家庭如何解決空氣汙染及甲醛超標?