gpt4 book ai didi

algorithm - 将一个随机值分成四个总和

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:34:14 26 4
gpt4 key购买 nike

我有一个值,如 24,我有四个文本框。如何动态生成四个加起来等于 24 的值?

所有值必须是整数,不能为负数,结果不能为6, 6, 6, 6;它们必须不同,例如:8、2、10、4。(但 5、6、6、7 也可以。)

最佳答案

对于您提出的问题,可以生成所有可能解决方案的数组,然后随机选择一个。实际上有 1,770 种可能的解决方案。

var solutions = [[Int]]()

for i in 1...21 {
for j in 1...21 {
for k in 1...21 {
let l = 24 - (i + j + k)
if l > 0 && !(i == 6 && j == 6 && k == 6) {
solutions.append([i, j, k, l])
}
}
}
}

// Now generate 20 solutions
for _ in 1...20 {
let rval = Int(arc4random_uniform(UInt32(solutions.count)))
println(solutions[rval])
}

这避免了以初始设置时间和存储为代价的任何偏差。


这可以通过以下方式改进:

  • 通过仅存储前 3 个数字来减少存储空间。第 4 个总是 24 -(前 3 个的总和)
  • 通过将每个解决方案存储为单个整数来减少存储空间:(i * 10000 + j * 100 + k)
  • 通过意识到每个循环不需要进行到 21 来加快解决方案的生成。

这是将每个解决方案存储为单个整数并优化循环的解决方案:

var solutions = [Int]()

for i in 1...21 {
for j in 1...22-i {
for k in 1...23-i-j {
if !(i == 6 && j == 6 && k == 6) {
solutions.append(i * 10000 + j * 100 + k)
}
}
}
}

// Now generate 20 solutions
for _ in 1...20 {
let rval = Int(arc4random_uniform(UInt32(solutions.count)))
let solution = solutions[rval]

// unpack the values
let i = solution / 10000
let j = (solution % 10000) / 100
let k = solution % 100
let l = 24 - (i + j + k)

// print the solution
println("\([i, j, k, l])")
}

关于algorithm - 将一个随机值分成四个总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30154718/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com