Skip to content

Instantly share code, notes, and snippets.

@quanon
Created April 7, 2021 10:00
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save quanon/0d26c85f6b5bf9e5fd227066a4b7a66f to your computer and use it in GitHub Desktop.
Save quanon/0d26c85f6b5bf9e5fd227066a4b7a66f to your computer and use it in GitHub Desktop.
require 'terminal-table' # https://github.com/tj/terminal-table
N = 30 # 合計人数
# table[n][0] は男子を選ぶ組み合わせの数。
# table[n][1] は女子を選ぶ組み合わせの数。
table = Array.new(N + 1) { Array.new(2, 0) }
# n = 1 のときは男子も女子も 1 通りずつ。
table[1][0] = 1
table[1][1] = 1
(1...N).each do |n|
# 男子の場合は直前が男子でも女子でも OK。
table[n + 1][0] += (table[n][0] + table[n][1])
# 女子の場合は直前が男子の場合のみ。
table[n + 1][1] = table[n][0]
end
puts(
Terminal::Table.new do |t|
t.headings = [nil, '男子', '女子']
table.each_with_index { |row, i| t.add_row([i, *row]) }
end
)
puts("答: #{table[N][0] + table[N][1]}")
@quanon
Copy link
Author

quanon commented Apr 7, 2021

+----+---------+--------+
|    | 男子    | 女子   |
+----+---------+--------+
| 0  | 0       | 0      |
| 1  | 1       | 1      |
| 2  | 2       | 1      |
| 3  | 3       | 2      |
| 4  | 5       | 3      |
| 5  | 8       | 5      |
| 6  | 13      | 8      |
| 7  | 21      | 13     |
| 8  | 34      | 21     |
| 9  | 55      | 34     |
| 10 | 89      | 55     |
| 11 | 144     | 89     |
| 12 | 233     | 144    |
| 13 | 377     | 233    |
| 14 | 610     | 377    |
| 15 | 987     | 610    |
| 16 | 1597    | 987    |
| 17 | 2584    | 1597   |
| 18 | 4181    | 2584   |
| 19 | 6765    | 4181   |
| 20 | 10946   | 6765   |
| 21 | 17711   | 10946  |
| 22 | 28657   | 17711  |
| 23 | 46368   | 28657  |
| 24 | 75025   | 46368  |
| 25 | 121393  | 75025  |
| 26 | 196418  | 121393 |
| 27 | 317811  | 196418 |
| 28 | 514229  | 317811 |
| 29 | 832040  | 514229 |
| 30 | 1346269 | 832040 |
+----+---------+--------+

答: 2178309

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment