파스칼 삼각형 그리기
출력 예
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단 출력해 보았습니다.
Reference
이 문제에 관하여(파스칼 삼각형 그리기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/kobachii/items/47f29efd25b522ce9e30텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)