我是一名學生,正在進行中期項目。我不是在尋找人爲我編碼,但我需要一些幫助。我正在嘗試製作一款二十一點遊戲,並且爲此我想爲一副牌中的每張牌設置一個52整數列表[1,1,1,1,2,2,2,2 .....] 。但是,如何從列表中取出一個隨機數並將其取消?就像一張正常的甲板一旦你拿了一張卡,你就不能重畫它。我知道一個可以爲程序設置一個隨機參數[n = rand()%11 + 1],但我想要超越以獲得一個A預設列表中的隨機數
-3
A
回答
-1
您可以使用像這樣的洗牌算法:https://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle。 Fisher - Yates shuffle以陣列開始,然後它將數組中的每個項目與陣列中的隨機項目進行切換。它也可以逐個刪除項目,但它更復雜。您可以使用二叉樹隨機刪除項目。存儲每個節點下的項目總數。每次刪除一個項目時,都會生成一個大於或等於0且小於剩餘項目數的隨機數。從根開始。如果a小於左側子項下的項目數,則轉到左側子項。否則,讓a成爲a,然後去正確的孩子。這是遞歸的。但是逐個刪除項目更加複雜。最好只使用混洗算法。
1
無法從數組中移除隨機元素。
你可以做的是將隨機選擇的元素與數組的最後一個元素進行交換。除此之外,您還需要將有效元素的數量存儲在變量array_size_valid
中的數組中,並在每次交換髮生時減少該值。
這樣你隨機指標生成功能將變爲:
rand_index = rand() % array_size_valid;
1
這裏是一個微不足道的方式:假設你有一個數組,其中包含52個整數:
int deck[52];
你已將其初始化爲所需的值,如1,1,1,1,2,2,2,2,......
當繪製卡時,將相應的數組e字元素爲-1(或比原來的那些以外的任何值):
int drawCard(int deck[])
{
do{
int randIndex = rand() % 52;
} while(deck[randIndex] == -1);
int drawnCard = deck[randIndex];
deck[randIndex] = -1;
return drawnCard;
}
雖然這種方法可能還不夠高效,它的工作,所以我認爲這可能有助於你一樣的初學者。
相關問題
- 1. 最有效的方式,以預設的隨機順序列表
- 2. 數組列表中的隨機詞
- 3. Python列表中的隨機數(x.difference)
- 4. 隨機整數列表
- 5. 從數組列表中隨機選擇
- 6. 在python中創建隨機數列表
- 7. adb android設備列表隨機爲空
- 8. 在Jmeter中設置隨機函數的隨機負數?
- 9. 列表中的python隨機序列
- 10. 隨機隨機化項目列表
- 11. Python隨機列表
- 12. 如何生成預設數量的隨機數字?
- 13. 隨機化SQL表的列數據
- 14. 巨大的隨機數排序列表
- 15. 更換的隨機列表
- 16. 如何隨機列表,並通過隨機列表(慶典)
- 17. 隨機排列隨機數組
- 18. 詞典:隨機密鑰和隨機數從鍵的列表中的項目
- 19. 僞隨機二進制序列預測
- 20. 生成一個隨機數得到一個隨機列表項
- 21. YouTube播放列表 - 隨機播放/隨機函數
- 22. 陣列隨機數
- 23. Python:列表和隨機。如何從0到[列表中的字符串數量]之間選擇隨機數字?
- 24. 產生可預測的隨機數C#
- 25. 如何在Haskell中隨機生成一個隨機生成的數字列表
- 26. 帶有ID和描述的隨機陣列 - 隨機數組和打印列表
- 27. 從陣列中設置隨機backgroundColor
- 28. 洗牌列表中隨機的Java
- 29. 列表中的隨機元素 - Python
- 30. 生成隨機列表中的空格
正是我在找的謝謝你。 – jojobuddy13
@ jojobuddy13如果你覺得它解決了你的問題,請接受這個答案:) –
這有可能進入一個無限循環。 –