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

ひとこと

もう少しシンプルに書ける気もします。

それから、最終列を出力する際にも行末にスペースが出力されています。(ちょっとずるしてしまっているかも)

Posted by genzouw