撲克牌洗牌是咱們生活中比較喜歡玩的一個遊戲。那麼咱們有沒有什麼辦法本身設計一個撲克牌洗牌的方法呢?在c運行庫當中有一個隨機函數rand,它能夠生成0~32767之間的任意數。那麼有沒有可能利用這麼一個函數對咱們撲克牌進行隨即洗牌呢?算法
在這裏我拋磚引玉一下,談一談本身目前已經看到的兩個算法。歡迎朋友們談一談其餘的方法。數組
(1)全局洗牌法函數
步驟以下所示:.net
a)首先生成一個數組,大小爲54,初始化爲1~54設計
b)按照索引1到54,逐步對每一張索引牌進行洗牌,首先生成一個餘數 value = rand %54,那麼咱們的索引牌就和這個餘數牌進行交換處理blog
c)等多索引到54結束後,一副牌就洗好了索引
代碼以下所示:遊戲
[cpp] view plain copyget
(2)局部洗牌法方法
上面的算法很是簡單,可是有一個問題,咱們發現每次洗牌以後原來洗好的牌都會進行二次操做,我的以爲有點說不過去,因此不妨加以改進:
a)一樣,首先咱們生成一個大小爲54的數組,數組排列爲1~54
b)索引牌從1開始,到54結束。這一次索引牌只和剩下尚未洗的牌進行交換, value = index + rand() %(54 - index)
c)等到全部的索引牌都洗好以後,一副牌就弄好了
代碼以下所示:
[cpp] view plain copy