一种方法是使用大小为n
的数组a[i]=i
。
现在改变它。
然后使用循环打印数字。但是可以不使用数组吗?
Ps:请不要使用任何内置的随机生成器功能。我试图得到一个合乎逻辑的答案并自己编写随机函数。
答案 0 :(得分:1)
我说这取决于您想要获得的随机数的质量。
极端情况是输出身份置换并声称它是随机的。好吧,他们根本不是随便看。
稍微更合理的解决方案是采用一些素数p > n
和一些整数a > 1
这是一个原始根模p
,然后查看a mod p
,{{ 1}},a^2 mod p
,...,a^3 mod p
。这将是数字a^{p-2} mod p
,2
,...,3
的排列。丢弃大于p - 1
的所有内容,然后输出其余内容。 (并以某种方式将丢失的n
插入随机位置。)所有这些都可以在O(1)附加内存中完成,方法是反复执行1
并在运行中丢弃元素x -> (x*a) mod p
。对于某些应用来说,结果可能是随机的:正确选择> n
,对于未经训练的人眼来说,它至少看起来很随机。不过,还不止于此。
为了获得高质量的随机数,我怀疑有一个使用O(1)额外内存的通用解决方案。但是不要接受我的话。让我们看看其他答案可能会带来什么。
答案 1 :(得分:0)
这个答案是基于python的,但你可以与你喜欢的任何其他编程语言联系起来。
import random # using random class
some_num = _ # any number
sample_num = _ # this should be less than or equal some_num
for num in random.sample(range(some_num), sample_num):
print(num)
这会生成随机数并使用循环打印它们。