Project1

标题: 一个数值怎么随机分配成多份 [打印本页]

作者: 小龙快追    时间: 2020-10-30 10:49
标题: 一个数值怎么随机分配成多份
一个数值怎么随机分配成多份,比如把数值 10 随机分成 1 3 2 3 1 这样
作者: 灯笼菜刀王    时间: 2020-10-30 11:58
本帖最后由 灯笼菜刀王 于 2020-10-30 12:01 编辑

def 拆数(n,m,type=true) #n:数值 ; m:多份, type: 拆开的数是否允许为0,默认允许
  f = []
  b = n
  t = type ? 0 : 1
  m.times do |i|
    a = (i + 1 == m) ? b : rand(b - (m - i - 1)) + t
    f.push(a)
    b -= a
  end
  return f
end

把这段随便塞进 main 前, 然后调用  p 拆数(10086,666,false)  

就可以得到你要的数组  

PS:没测试
作者: enghao_lim    时间: 2020-10-31 15:15
本帖最后由 enghao_lim 于 2020-10-31 15:18 编辑

我也给出一个几乎没有效率的方法……
  1. def split(n, m, zero = false)
  2.     g = (n/m).to_i
  3.     r = []
  4.     for i in 0 ... m
  5.         if (not zero)
  6.             r.push(1)
  7.         else
  8.             r.push(0)
  9.         end
  10.     end
  11.     n -= m if not zero
  12.     while(n > 0)
  13.         for i in 0 ... m
  14.             k = rand(g + 1)
  15.             r[i] += k
  16.             n -= k
  17.             if (n < 0)
  18.                 r[i] += n
  19.             end
  20.             break if n < 0
  21.         end
  22.     end
  23.     return r
  24. end
复制代码

作者: SixRC    时间: 2020-10-31 15:52
RUBY 代码复制
  1. def split(m, n)
  2.   h = Array.new(n-1){rand m+1} + [0, m]
  3.   h.sort!
  4.   (1..n).map{|i|h[i] - h[i-1]}
  5. end

就是0-m之间随机选几个点然后一段段拿出来
每段大小0-m随机
默认切成有0的
要是最少要1
map那里加1 开头m减n就行了




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1