【发布时间】:2018-07-03 10:26:59
【问题描述】:
代码首先生成一个介于 0-8 之间的随机数,并将其分配给 var n。然后第二个 randomNumber Generator 函数循环 n 次以生成 n 个介于 0 和 10 之间的整数,所有整数都具有不同的发生概率并最终放入数组中。我想要的是这 10 个可能的数字都不重复,所以一旦选择了一个,它就不能再被其他 n-1 次运行 func 选择。我正在考虑重复循环或 if 语句或涉及索引的东西,但我不知道具体如何,也不知道在什么括号内。谢谢你的帮助!有人说这是地球上最具挑战性和最智能的编码难题。接受挑战了吗?
import UIKit
let n = Int(arc4random_uniform(8))
var a:Double = 0.2
var b:Double = 0.3
var c:Double = 0.2
var d:Double = 0.3
var e:Double = 0.2
var f:Double = 0.1
var g:Double = 0.2
var h:Double = 0.4
var i:Double = 0.2
var j:Double = 0.2
var k: [Int] = []
for _ in 0...n {
func randomNumber(probabilities: [Double]) -> Int {
let sum = probabilities.reduce(0, +)
let rnd = sum * Double(arc4random_uniform(UInt32.max)) / Double(UInt32.max)
var accum = 0.0
for (i, p) in probabilities.enumerated() {
accum += p
if rnd < accum {
return i
}}
return (probabilities.count - 1)
}
k.append(randomNumber(probabilities: [a, b, c, d, e, f, g, h, i, j]))
}
print(k)
【问题讨论】:
-
我可以告诉你伪代码,如果你想要或者一个合适的 python 代码
-
是的,请!....
-
伪代码.....
-
你的例子有问题。您的十个数字(a 到 j)只有四个值:0.1、0.2、0.3、0.4。一旦您选择了这四个值,那么第五个选择必须重复。根据您的条件,最多不可能得到 8 个数字。
-
否,因为这些值成为 var 发生的概率。运行时,输出的是整数 0-10
标签: swift xcode random probability repeat