如何从1到100选择一个随机数?重复这10次,确保没有重复的数字?

时间:2014-03-26 17:28:49

标签: algorithm random numbers

所以我想知道如何从1到100中选择一个随机数,然后再次重复并选择另一个随机数,并继续重复,直到我有10个随机数。如何确保没有随机数重复?所以它们都是唯一的数字。

6 个答案:

答案 0 :(得分:4)

取数字1-100。随机洗牌。返回前10个。

这是Fisher-Yates shuffle的一个变体,用于基于零的数组 a 长度 n

for i from n − 1 downto 1 do
     j ← random integer with 0 ≤ j ≤ i
     exchange a[j] and a[i]

答案 1 :(得分:1)

最简单的方法是在循环中生成下一个数字,并在尚未选择新生成的数字时退出循环。伪代码:

Generated = empty-sequence
repeat 10 times:
|   repeat:
|   |   New = uniform-random-int [1, 100]
|   until New not in Generated
|   append New to Generated

如果你需要速度,有更快的方法,但这是一个开始。

答案 2 :(得分:0)

我的意见是,如果你想确定你得到10个随机数,一旦你产生一个随机数将它放在一个列表或类似的东西中,对于其他的只是检查它是否在列表中,如果它不是如果生成另一个,请将其插入。继续这样做,直到你有10或你需要多少。

答案 3 :(得分:0)

好吧,我不知道你打算使用哪个程序或东西,但我会这样做:

1创建一个随机数。

2将数字存储在数组或行中。

3然后创建一个新号码。

4检查该号码(如果已使用),然后删除该号码,然后重试。

5 else将该数字存储在同一个数组或行(数字2)

6重复步骤3-5,直到你有10个唯一的数字。

希望这有帮助!

答案 4 :(得分:0)

以Java为例:

    Random rand = new Random();
    HashSet<Integer> randoms = new HashSet();
    while(randoms.size() < 10) {
      randoms.add(rand.nextInt(100));
    }

答案 5 :(得分:0)

最简单的算法可以假设您没有空间问题(伪代码)

  

list = [1,2,3,4,5,..... 100]

     

使用Fishers Yates shuffle或任何其他随机算法

随机洗牌      

使用前10位

python中的可能代码可能是

import random
list1=[]
for i in range(1,101):
    list1.append(i)
random.shuffle(list1)
for i in range(0,10):
    print(list1[i])

Fisher Yates shuffle是一种简单的算法 假设你有一个N个元素的数组,坐标A [N],索引为[0,N-1]。

  1. 从最后一个元素开始迭代数组。
  2. 如果您从最后到第i个元素,请在范围[0,i]中生成一个随机数,例如j。
  3. 交换A [i]和A [j]。
  4. 继续,直至到达索引1处的元素,即A 1
  5. 所以在python中可以调整10个值,你可以像

    一样
    import random
    a=[1,2,3,4,5,6,7,8,9,10]  # initializing the values to be sorted in a matrix
    index=9
    while(index>=0):
        x=random.randint(0,index)
        a[x],a[index]=a[index],a[x]   #swapping values at A[x] with A[index]
        index-=1   #reducing the value of index by 1
    print (a)