解析游戏中的简单概率算法
什么是概率算法?
概率算法也叫隨機(jī)化算法。概率算法允許算法在執(zhí)行過程中隨機(jī)地選擇下一個(gè)計(jì)算步驟。在很多情況下,算法在執(zhí)行過程中面臨選擇時(shí),隨機(jī)性選擇比最優(yōu)選擇省時(shí),因此概率算法可以在很大程度上降低算法的復(fù)雜度。
概率算法的一個(gè)基本特征是對所求解問題的同一實(shí)例用同一概率算法求解兩次可能得到完全不同的效果。這兩次求解問題所需的時(shí)間甚至所得到的結(jié)果可能會有相當(dāng)大的差別。
應(yīng)用
用于游戲中的寶箱,陷阱之類的隨機(jī)生成,可以改變生成的幾率。
思想
運(yùn)用產(chǎn)生隨機(jī)數(shù)的函數(shù)rand()來隨機(jī)生成一個(gè)數(shù),和產(chǎn)生寶箱或陷阱的概率進(jìn)行比較,如果小于就生成寶箱或陷阱,反之則不生成。
注意
rand()函數(shù)
rand(產(chǎn)生隨機(jī)數(shù))
表頭文件: #include<stdlib.h>
定義函數(shù) :int rand(void)
函數(shù)說明 :
因?yàn)閞and() 的內(nèi)部實(shí)現(xiàn)是用線性同余法做的,它不是真的隨機(jī)數(shù),只不過是因?yàn)槠渲芷谔貏e長,所以有一定的范圍里可看成是隨機(jī)的,rand() 會返回一隨機(jī)數(shù)值,范圍在 0 至 RAND_MAX 間。
在調(diào)用此函數(shù)產(chǎn)生隨機(jī)數(shù)前,必須先利用 srand()設(shè)置好隨機(jī)數(shù)種子,如果未設(shè)隨機(jī)數(shù)種子,rand()在調(diào)用時(shí)會自動設(shè)隨機(jī)數(shù)種子為 1。
rand()產(chǎn)生的是假隨機(jī)數(shù)字,每次執(zhí)行時(shí)是相同的。若要不同,以不同的值來初始化它,初始化的函數(shù)就是 srand()。
使用srand函數(shù)要包含time.h頭文件,然后使用srand(time(0))來使用當(dāng)前時(shí)間使隨機(jī)數(shù)發(fā)生器隨機(jī)化,這樣就可以保證每兩次運(yùn)行時(shí)可以得到不同的隨機(jī)數(shù)序列,同時(shí)這要求程序的兩次運(yùn)行的間隔超過1秒。
返回值:
返回 0 至 RAND_MAX 之間的隨機(jī)整數(shù)值,RAND_MAX 的范圍最少是在 32767 之間(int),即雙字節(jié)(16位數(shù))。
若用unsigned int 雙字節(jié)是 65535,四字節(jié)是 4294967295 的整數(shù)范圍。
0~RAND_MAX 每個(gè)數(shù)字被選中的機(jī)率是相同的。
代碼實(shí)現(xiàn)
#include<iostream> #include<stdlib.h> #include<time.h> using namespace std;int main() {int TreasureBox = 20;//寶箱掉落的概率為20srand(time(NULL));//使這個(gè)初始化種子保持著時(shí)刻不同int pr = rand() % 101;//0-100if (pr < TreasureBox){cout << "掉落寶箱"<<endl;return 1;}else{cout << "不掉落寶箱"<<endl;return 0;}}這只是一個(gè)簡單的概率算法,如有意見歡迎在下面評論提出!
總結(jié)
以上是生活随笔為你收集整理的解析游戏中的简单概率算法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: excel熵值法计算权重_熵权法评价估计
- 下一篇: 蒙特卡罗类型概率算法