所以我想知道如何从1到100中选择一个随机数,然后再次重复并选择另一个随机数,并继续重复,直到我有10个随机数。如何确保没有随机数重复?所以它们都是唯一的数字。
答案 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]。
所以在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)