gpt4 book ai didi

c - 总和在给定范围内的随机数数组?

转载 作者:太空狗 更新时间:2023-10-29 17:09:54 29 4
gpt4 key购买 nike

在 C 中,我如何获得一个 n 个数字的数组(在我的例子中每个数字为 0x00-0xFF),其总和在给定范围内 0..k?

几乎重复 C++ multiple random numbers adding up to equal a certain number目标是一个特定的总和,但在我的例子中,总和可以是 0..k 之间的任何值。

最佳答案

您需要指定所需的随机数分布。

如果没有进一步的要求,我会建议以下之一:


(1)

  • 0 .. k 区间内选择随机数 a[1]
  • 在区间 0 .. k-a[1] 中选择随机数 a[2]
  • 在区间 0 .. k-a[1]-a[2] 中选择随机数 a[3]
  • ...
  • 在区间 0 .. k-a[1]-a[2]-...-a[n-1] 中选择随机数 a[n]/li>

如果您对随机数的范围有上限 m,请使用 min(k-a[1]-... m) 作为区间的上限.

缺点:你会得到很多小数字,只有几个大数字。


(2)

  • 0 .. m, 中选择 n 个随机数 a[1], .., a[n] m 为上限
  • s = a[1]+a[2]+...+a[n]
  • 将每个 a[i] 乘以 k/s(如果需要整数,向下舍入)

缺点:这种方式不太可能得到大数字。如果需要整数,则由于舍入误差,数字总和与 k 之间可能存在差距。


我认为您可以通过选项 (2) 获得“更好”的数字,但如上所述,这取决于要求。

关于c - 总和在给定范围内的随机数数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30751360/

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