파스칼 삼각형 그리기

7710 단어 수학루비
수학 소녀 / 난택 알고리즘 을 읽고 파스칼의 삼각형이 너무 재미있을 것 같아서 Ruby로 그려 보았습니다.

출력 예



5단

1 
1 1 
1 2 1 
1 3 3 1 
1 4 6 4 1 

 
21단

1 
1  1 
1  2   1 
1  3   3    1 
1  4   6    4    1 
1  5  10   10    5     1 
1  6  15   20   15     6     1 
1  7  21   35   35    21     7     1 
1  8  28   56   70    56    28     8      1 
1  9  36   84  126   126    84    36      9      1 
1 10  45  120  210   252   210   120     45     10      1 
1 11  55  165  330   462   462   330    165     55     11      1 
1 12  66  220  495   792   924   792    495    220     66     12      1 
1 13  78  286  715  1287  1716  1716   1287    715    286     78     13     1 
1 14  91  364 1001  2002  3003  3432   3003   2002   1001    364     91    14     1 
1 15 105  455 1365  3003  5005  6435   6435   5005   3003   1365    455   105    15     1 
1 16 120  560 1820  4368  8008 11440  12870  11440   8008   4368   1820   560   120    16    1 
1 17 136  680 2380  6188 12376 19448  24310  24310  19448  12376   6188  2380   680   136   17    1 
1 18 153  816 3060  8568 18564 31824  43758  48620  43758  31824  18564  8568  3060   816  153   18   1 
1 19 171  969 3876 11628 27132 50388  75582  92378  92378  75582  50388 27132 11628  3876  969  171  19  1 
1 20 190 1140 4845 15504 38760 77520 125970 167960 184756 167960 125970 77520 38760 15504 4845 1140 190 20 1 

소스 코드


def cal_pascals_triangle(n)
  ary_i = []
  (1..n).each do |i|
    ary_i = cal_one_line(i, ary_i)
    @arrays.push(ary_i)
  end
end

def cal_one_line(i, ary_i)
  ary_i_minus_1 = []
  (i - 1).times do |j|
    ary_i_minus_1 << ary_i[j]
  end
  ary_preparing = [1]
  ((i - 1) / 2).times do |j|
    ary_preparing << (ary_i_minus_1[j] + ary_i_minus_1[j + 1])
  end
  ary_i = ary_preparing + ary_preparing.reverse
  ary_i.delete_at(i/ 2) if i.odd?
  ary_i
end

def drow_all_lines(arrays)
  arrays.each do |line|
    line.each_with_index do |element, index|
      difference = arrays.last[index].to_s.size - element.to_s.size
      print ' ' * difference if difference > 0
      print element.to_s + ' '
    end
    print "\n"
  end
end

puts "パスカルの三角形を描きます\n何段まで描きますか?"
n = gets.chomp.to_i
@arrays = []
cal_pascals_triangle(n)
drow_all_lines(@arrays)

계산 방법



1단씩 계산하고 있습니다.
전단의 값을 더해, 값을 산출하고 있습니다.
(조합의 수를 요구하는 것은 아닙니다.)

묘사 방법



전단 정리해 묘사하고 있습니다.
1위치의 수직 방향의 위치를 ​​기점으로 하여 각 값을 출력하도록 했습니다.



디스플레이를 축소하고, 45단 출력해 보았습니다.

좋은 웹페이지 즐겨찾기