大家在玩鬥地主的時候,每次都是隨機發牌,每個人拿到手的牌都是和上一次不一樣的。那麼電腦是如何做到隨機的呢?
首先大家想到的就是採用系統本身的隨機演算法產生的隨機數,每次都根據產生的隨機數來獲取不同位置的。
舉個簡單的例子:0-9這10個數,如何讓這10個數隨機排序呢,而且保證每次出現的概率都是一樣的?
1.首先初始化兩個陣列含有10個整數的陣列a和陣列b,a陣列用來存放原始資料,b陣列用來存放隨機的排序後的數
2.根據隨機產生的位置來取a陣列中對應位置整數並且依次放到b陣列中(例如:第一次產生的隨機數是3,則把a[3]中的整數取出後放到b[0]中)
3.把第一次a陣列中取出的整數和a陣列中最後乙個位置的整數交換(第二取出的數和倒數第二個位置的數交換,第三次取出的數和倒數第三個位置的數交換…以此類推),這樣完成一次隨機取數。
先看效果:
//隨機排序類
class
randomnumber
;
#include
"randomnumber.h"
#include
randomnumber::
randomnumber()
randomnumber::
~randomnumber()
void randomnumber::
setmaxnumber
(int maxnum)
_orgnum =
newint
[_maxnumber]
; _randnum =
newint
[_maxnumber]
;for
(int i =
0;i< _maxnumber; i++)}
int* randomnumber::
getrandnumber
(int
&countnumber)
return _randnum;
}
aaa C 洗牌演算法
最近悟出來乙個道理,在這兒分享給大家 學歷代表你的過去,能力代表你的現在,學習代表你的將來。十年河東十年河西,莫欺少年窮 學無止境,精益求精 c 洗牌演算法如下 class program static void init listlist string cate new string for in...
C 洗牌演算法
最近悟出來乙個道理,在這兒分享給大家 學歷代表你的過去,能力代表你的現在,學習代表你的將來。十年河東十年河西,莫欺少年窮 學無止境,精益求精 c 洗牌演算法如下 class program static void init listlist string cate new string for in...
粗糙的洗牌演算法實現
今天無意中聊起洗牌演算法,於是就嘗試寫一下這個洗牌演算法,不管演算法多麼簡陋,主要進一步熟悉js語言,鍛鍊一下自己。我的思路,模擬現實中的洗牌常用方法 1 一開始牌的狀態是有序或者無序的。2 每次講牌分開兩半,然後用左右手分別將這兩堆牌交叉,得到乙個新順序的牌。3 將過程2重複n次,即洗好牌。4 上...