如何使用代码执行此操作:
产生15个随机数[编辑:从1 - 15],这些数字不是任何顺序,只发生一次 例如
1 4,2,5,3,6,8,7,9,10,13,12,15,14,11
rand()或arc4rand()可以重复一些,这不是我之后的内容。
由于
答案 0 :(得分:4)
最简单的方法是生成数字1-15的集合(例如数组),然后将其洗牌。 (编辑:通过“数字1-15的集合”我的意思是1,2,3,4,5 ... 15.不是 1-15范围内的随机数的集合。如果我的意思是,我已经这么说了:))
您还没有详细说明您所在的平台,因此我们无法轻松提供示例代码,但我非常喜欢Fisher-Yates shuffle的现代版本。例如,在C#中:
public static void Shuffle<T>(IList<T> 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<int> numbers = new HashSet<int>();
while (numbers.Count < 15)
{
numbers.Add(rng.Next());
}
List<int> list = numbers.ToList();
// Now shuffle as before
最后的洗牌是为了确保可能的任何排序都不会影响最终结果。
答案 1 :(得分:2)
生成完整列表,然后将其洗牌。
的Python:
import random
r = range(1, 16)
random.shuffle(r)
随机数生成器本身几乎可以按照您的意愿执行操作。它需要跟踪已经生成的所有数字,这与上面描述的解决方案一样需要内存。