所以基本上,我需要帮助编写代码来随机选择0到K-1范围内不等于J的整数。非常感谢任何帮助!
另一个编辑:感谢所有帮助到目前为止,我已经提出以下内容,忽略了我不能等于J的要求。但是,我遇到的另一个问题是该过程必须重复多次时间,并且由于每次i的值总是相同时使用相同的种子。我该如何确保种子价值在每一代人中保持不变?再次,非常感谢任何帮助!
program randtest
implicit none
real*4 :: u(5)
integer :: i(5)
integer :: k = 4
integer, dimension (1) :: seed = (/2817/)
call random_seed(put=seed)
call random_number(u)
i = floor((k+1)*u)
print *, i
end program randtest
答案 0 :(得分:2)
对于集合{0,1,...,K-1},确实可以使用the other question的答案中给出的方法。可以通过在采样时拒绝J来处理J(0 <= J <= K-1)的复杂性。
然而,更好的方法是注意有K-2个有效整数:{0,1,...,J-1,J + 1,...,K-1}。因此,使用该方法生成一个超过{0,1,...,K-2}的整数,并将任何可能因拒绝J而受影响的东西移位。
call random_number(u)
i = FLOOR((K-1)*u) !this would be how I would define the range
if (i.ge.J) i=i+1