C 洗牌演算法的實現

2021-10-24 20:22:00 字數 1101 閱讀 1118

大家在玩鬥地主的時候,每次都是隨機發牌,每個人拿到手的牌都是和上一次不一樣的。那麼電腦是如何做到隨機的呢?

首先大家想到的就是採用系統本身的隨機演算法產生的隨機數,每次都根據產生的隨機數來獲取不同位置的。

舉個簡單的例子: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 上...