Comment detail

自然数の分割(別表現) (Nested Flatten)
あえて解析的でない方法をトライしましたが、遅い・・・。  処理の前提は、
・[5,1,1] --> [4,1,2](先頭を-1、最後を+1) --> [4,2,1](ソート)を
繰り返して配列に追加していけば、全ての組み合わせを求められる
・[6,2,2] --> [5,1,1,1]の様に長さが変わる時は先頭以外は全て1
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
def young(n,a=[[n]])
  while a[-1][0] > 1
    a.each {|i|
      w = i[0..-1]
      while w[0] - w[-1] > 1
        w[0] -= 1
        w[-1] += 1
        a << w.sort.reverse
      end
    } 
    print_young(a.uniq)
    lth = a[-1].size
    a = [[n - lth] + [1] * lth]
  end
end

def print_young(a)
  a.each{|i|p i}
end

young(n = gets.chomp.to_i)

Index

Feed

Other

Link

Pathtraq

loading...