給定N張撲克牌和乙個隨機函式,設計乙個洗牌演算法

2021-07-05 18:25:20 字數 619 閱讀 1255

假定n=54,首先,我們有乙個隨機函式發生器,能夠產生1-54之間的隨機數,如何保證抽第一張牌是54中可能,抽第二張牌是53中可能,……

可以這樣做,假設撲克牌是乙個54維的陣列card, 我們要做的就是從這個陣列中隨機取乙個元素,然後在剩下的元素裡再隨機取乙個元素…

這裡涉及到乙個問題,就是每次取完元素後,我們就不會讓這個元素參與下一次的選取。

int index=i+rand()%(n-i);//保證前面已經確定的元素不會參加下面的選取

我們要實現的目的是以等概率的方式將這54個數隨機打亂排列,因此,可以這樣處理:

第一次抽牌在初始54張牌中,將 隨機產生的牌x,與第乙個元素互換,

第二次抽牌在剩下的53張牌中,將 隨機產生的牌y,與第二個元素互換,

//隨機產生序列號,類似選擇排序(通過index=i + rand()%(n-i)保證前面選好的元素下標不會再次被使用),完成元素交換

void shuffle(int cards,int n)

{ if(cards==null)

return ;

srand(time(0));

for(int i=0;i

從撲克牌中隨機抽取5張牌,判斷是不是乙個順子。

從撲克牌中隨機抽取5張牌,判斷是不是乙個順子。一 演算法描述 從撲克牌中隨機抽取5張牌,判斷是不是乙個順子,即這5張牌是不是連續的2 10位數字本身,a為1,j為11,q為12,k為13,而大小王可以看成任意數字 bool sunzi int number,int length qsort numb...

乙個有關撲克牌牌型分析的問題

此前,在公司的專案開發中,我負責著手解決這樣乙個問題 在鬥地主遊戲中,根據玩家出的 出這手牌的牌型。火箭 即雙王 大王和小王 炸彈 四張同數值牌 如四個7 單牌 單個牌 如紅桃5 對牌 數值相同的兩張牌 如梅花4 方塊4 三張牌 數值相同的三張牌 如三個j 三帶一 數值相同的三張牌 一張單牌或一對牌...

乙個有關撲克牌牌型分析的問題

此前,在公司的專案開發中,我負責著手解決這樣乙個問題 在鬥地主遊戲中,根據玩家出的 出這手牌的牌型。火箭 即雙王 大王和小王 炸彈 四張同數值牌 如四個7 單牌 單個牌 如紅桃5 對牌 數值相同的兩張牌 如梅花4 方塊4 三張牌 數值相同的三張牌 如三個j 三帶一 數值相同的三張牌 一張單牌或一對牌...