一千萬個為什麽

搜索

生成非重復,無序列號


如何使用代碼執行此操作:

產生15個隨機數[編輯:從1 - 15],不是任何順序,只發生一次 例如。

1 4,2,5,3,6,8,7,9,10,13,12,15,14,11

rand()或arc4rand()可以重復一些,這不是我之後的事情。

謝謝

最佳答案

最簡單的方法是生成數字1-15的集合(例如數組),然後將其洗牌。 (編輯:通過“數字1-15的集合”,我的意思是1,2,3,4,5 ...... 15.不是 1-15範圍內的隨機數的集合。如果我的意思是,我已經說過了:)

你沒有詳細說明你所在的平臺,所以我們不能輕易提供示例代碼,但我是 Fisher-Yates shuffle 。例如,在C#中:

public static void Shuffle(IList collection, Random rng)
{
    for (int i = collection.Count - 1; i > 0; i--)
    {
        int randomIndex = rng.Next(i + 1);
        T tmp = collection[i];
        collection[i] = collection[randomIndex];
        collection[randomIndex] = tmp;
    }
}

如果你想產生“更隨機”的數字(例如,在你可用的整個整數範圍內有15個不同的整數)那麽可能最容易做這樣的事情(再次,C#但應該很容易到港口):

HashSet numbers = new HashSet();
while (numbers.Count < 15)
{
    numbers.Add(rng.Next());
}
List list = numbers.ToList();
// Now shuffle as before

最後的洗牌是為了確保可能的任何排序都不會影響最終結果。

轉載註明原文: 生成非重復,無序列號

猜你喜歡