Go 言語で「基礎プログラミング演習 I 〜100 本ノック上級編」を解いてみる-No.82「パスカルの三角形 ☆」
はじめに
「基礎プログラミング演習 I 〜100 本ノック上級編」を解いてみます。
取り扱う問題は以下のサイトを引用させていただきました。
検証環境
$ uname -moi
x86_64 unknown GNU/Linux
$ head -n 2 /etc/os-release
PRETTY_NAME="Debian GNU/Linux 10 (buster)"
NAME="Debian GNU/Linux"
$ go version | head -n 1
go version go1.16.3 linux/amd64
問題
No. 82 パスカルの三角形 ☆
パスカルの三角形とは、1 段目は 1 のみ、2 段目からは段の数だけ数字が並び、両端は 1、その間は左上と右上の値を足した値、として作っていった数字の並びである(Wikipedia「パスカルの三角形」参照)。このパスカルの三角形を 15 段まで計算して表示するプログラムを作成せよ。ただし表示は左詰で値はスペースで区切って表示するのでよい(三角形に並べなくてもよい)。
# 【実行例】
$ ./knock82
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
回答
knock82.go
package main
import (
"fmt"
)
func main() {
nums := make([]int, 15)
nums[0] = 1
for i := 0; i < len(nums); i++ {
for j := i; j > 0; j-- {
nums[j] += nums[j-1]
}
for _, n := range nums[0 : i+1] {
fmt.Printf("%d ", n)
}
fmt.Println()
}
}
実行
$ go run knock82.go
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
ひとこと
もう少しシンプルに書ける気もします。
それから、最終列を出力する際にも行末にスペースが出力されています。(ちょっとずるしてしまっているかも)
ディスカッション
コメント一覧
まだ、コメントがありません