『7段の階段』解答


◆山梨県 Footmark さんからの解答。

【問題1】

まず、(条件1)だけで7段の階段を昇る(または降りる)方法を考えてみます。
今、階段のある段まで昇って来たものとすると、その段に来る一歩手前は、1段下か2段下かのいずれかです。

それ故、その段まで昇る方法は、1段下まで、2段下までの、それぞれ昇る方法の合計です。
また、1段目まで、2段目まで、を昇る方法は以下の通りです。

1段目まで昇るのは1通り : (1)
2段目まで昇るのは2通り : (1+1),(2)
これは、1段目を1,2段目を2として、
K段目の数 = (Kー1)段目の数 + (Kー2)段目の数 
で、得られるフィボナッチ数列です。
 1段目まで:  1通り
 2段目まで:  2通り
 3段目まで:  3通り
 4段目まで:  5通り
 5段目まで:  8通り
 6段目まで: 13通り
 7段目まで: 21通り
降りる方法も同様ですから(条件1)だけで昇る(または降りる)を1回する方法は21通りあります。
当然、階段の1往復はこのことを2回行うので212通りです。

(条件2)を付加させます。

問題の条件より0段目(降りきる)と7段目(昇りきる)は必ず踏みます。
また、ある段を踏まなければその段の1段下と1段上は必ず踏まれます。

求める1往復して全ての段を踏んでいる場合の数は1往復の場合の数から1往復してもどこかの段が踏まれなかった場合の数を引いてやればよい筈です。

これらのことより

 1往復して全ての段を踏んでいる場合の数

=1往復の場合の数
 − 1往復しても1段目は決して踏まない場合の数
 − 1往復しても2段目は決して踏まない場合の数
 − 1往復しても3段目は決して踏まない場合の数
 − 1往復しても4段目は決して踏まない場合の数
 − 1往復しても5段目は決して踏まない場合の数
 − 1往復しても6段目は決して踏まない場合の数

 + 1往復しても1段目と3段目は決して踏まない場合の数
 + 1往復しても1段目と4段目は決して踏まない場合の数
 + 1往復しても1段目と5段目は決して踏まない場合の数
 + 1往復しても1段目と6段目は決して踏まない場合の数
 + 1往復しても2段目と4段目は決して踏まない場合の数
 + 1往復しても2段目と5段目は決して踏まない場合の数
 + 1往復しても2段目と6段目は決して踏まない場合の数
 + 1往復しても3段目と5段目は決して踏まない場合の数
 + 1往復しても3段目と6段目は決して踏まない場合の数
 + 1往復しても4段目と6段目は決して踏まない場合の数

 − 1往復しても1段目と3段目と5段目は決して踏まない場合の数
 − 1往復しても1段目と3段目と6段目は決して踏まない場合の数
 − 1往復しても1段目と4段目と6段目は決して踏まない場合の数
 − 1往復しても2段目と4段目と6段目は決して踏まない場合の数

=212
 − [82+(1x5)2+(2x3)2+(3x2)2+(5x1)2+82]
 + (32+22+22+32+22+12+22+22+22+32)
 − (12+12+12+12)

= 212-2(82+52+62)+3(32)+6(22)-3
= 239
【答え】 239通り

【問題2】

1番下から昇りきるか1番上から降りきるかのどちらかを1回とすると、一般的にN回繰り返して全ての段を踏んでいる場合の数は、【問題1】で得られた最後の式の
 2 を N にすれば良いので

 昇りきるか降りきるかの行為をN回繰り返して全ての段を踏んでいる場合の数
=21N-2(8N+5N+6N)+3(3N)+6(2N)-3
ここで2往復の時は、上式に N=4 を代入すれば得られるので
 2往復して全ての段を踏んでいる場合の数
=214-2(84+54+64)+3(34)+6(24)-3
= 182783
【答え】 182783通り


◆愛知県 Y.M.Ojisan さんからの解答。

【問題1】

239 とおり

【問題1証明と一般化】

1段または2段づつ移動可能な7段のぼりの場合の数は 「オンボロ階段」などで解説されているように「フィボナッチ数列」で表すことができます。

即ち
 FN=FN-1+FN-2
 F0=1,F1=1 より F7=21です。
以下にVisualに証明をして行きますが21はちょっと多いので6段(13個とおり)を例にします。

○N段移動の方法の表現 (1段、2段、1段。。。)というふうにそのまま表現することもできますが、
途中のN−1段のうち踏んだところを「」踏んでないところを「」で表し、
全体でN−1ビットのビットパターンで表すことも可能で、ここではこの方法ないし、これを10進値化した値で「方法」を表現します。

 この場合、ビットパターンとしては2N-1通りありますが、
当然>FNであり 「1」が2個以上連続するところがある(3段以上登った)パターンが排除されています。

このように考えると、「下り」のパターンも登りと全く同じになり区別する必要がありません。
従って、両方を合せて「N段移動の方法」と呼ぶことにします。

例)

N=6

           

           

     

   

   

     

 

       

           

           
 

=17

○記号の定義
(表現が簡潔になるのでかたくるしいですが記号化します)

 N	: 階段の段数(自然数)

 SN	: N段の移動の方法の集合。 要素数はFN 

 &	: N段の移動とM段の移動の合成演算。N=Mで登り降り後の状態を求める。
	  実際にはビットパターンのビット毎の論理積である。SN&SM
	  すなわち、どちらも踏んでないときだけ「1」。

 [&]	: 直積集合の作製。即ち SN[&]SN は「登り+下り」の全方法の集合。

  Exec()	: 直積集合の演算実行後の状態の集合作製。直積で無い場合はそのもの。
	  一般にExec(SN[&]SN)=SN&SN=SN

Count()P	: 直積集合の要素のうち全演算実行後 状態がPになる要素の個数。
	  従って、問題1の答えは Count(S7[&]S7)0
       なお、PをはずしたCount()は FN次元行ベクトル
	    :=( Count()0,Count()#2要素,.., Count()#Fn要素) とする。

 SNq	:  q個のSN直積集合 =SN[&]SN[&]SN[&]SN…[&]SN
	  問題2の答えは Count(S74)0
#x	: 下記関係(4)の方法でならべてx番目の方法(要素)を表す。#0:0

○関係

(1)SN⊂SM  for N<M
Nの要素に対し残り階段を全部踏めばSMの要素である。
下図参照

(2)SN&SM=Smin(N,M)

e∈SN⊂SMに対し
e&e=e である。

またN<Mとして
e∈SN f∈SMに対し
e&f∈SN である。
上図参照

(3)(SN+1−SN)&SN=SN-1

N+1の要素の最上位2ビットに着目すると「11」は無く、
「01」,「00」 はSNの要素であるから、
N+1−SNの要素は最上位2ビットが「10」である。
これとSN要素との&をとると最上位2ビットが「00」になり、
N-1の要素である。
上図参照

(4)逆に(3)の方法でSNの要素を規則的に作製して行くことが可能であり、要素数がフィボナッチ数列であることと等価である。

(5.1)Count((SN+1−SN)[&]SN-1)=Count(SN-1[&]SN-1)
(5.2)Count((SN+1−SN)[&]SN)=Count(SN-1[&]SN)
(3)の証明参照。

○計算

 S6[&]S6 をExec()した個々の結果を下表(&演算九九表)に示す。
この表から結果が「」になる要素の数を数えればよく、
N=Count(SN[&]SN)0と置くとき、G6=99であることが分かる。

なお、関係(1)(2)から要素を(4)により並べておけば、得られた九九表の左上
「FN×FN」の部分は「SN[&]SN」の九九表になっており、
1〜G6の値も数えることが出来る。

 下表を見れば分かる様に
「S4[&]S4」の部分(空色集合)のパターンを
「S5[&]S5」は1個、「S6[&]S6」は3個含み、
「S5[&]S5」の一部分(灰色集合)のパターンを
「S6[&]S6」は2セット含み、その他の部分は「」を含んでいない。

従って G6=2G5+G4の関係がある。

これは一般にも正しく
N+1=2GN+GN-1である。

なぜなら、関係(5.1)により空色集合

{SN-1[&]SN-1 と(SN+1−SN)[&]SN-1とSN-1[&](SN+1−SN)}
は同じ個数パターンである。

また(5.2)により空色灰色集合

{SN-1[&]SN と(SN+1−SN)[&]SNとSN[&] SN-1とSN[&](SN+1−SN)}
も同じ個数パターンである。

また 緑色集合

{(SN+1−SN)[&](SN+1−SN)}
は最上位ビットが「1」同士なので「」にはならない。

よって、G7=2G6+G5=2*99+41=239である。

【問題2】

182783 通り

【問題2証明と一般化】

次のようなFN×FN行列 NΓ を作成する。

NΓIJ=Count(#J[&]SN)#I

この行列の要素の意味は 上りに#J要素選び、下りに全ケースを行った場合に #Iの状態が残る組み合わせの数を示す。

従って、一般に「N段の移動」をq回行ったあとの各パターンの組み合わせ数のベクトルVは、1をFN個並べた列べクトルとNΓを用いて

V=Count(SNq)=NΓqー1×(1,1,1……,1)t

であり、全段を踏んだ場合の数は「」に対応するその第一成分であって

Count(SNq)0
=(1,0,0,…,0)×V
=(1,0,0,…,0)×NΓqー1×(1,1,1…,1)tである。

 具体的にNΓの成分値を求めるには、先の九九表を作成して「」の数、「#2」の数。。。。。「#Fn」の数を列毎に数え上げて列方向に記入しながら
上三角行列であるNΓを作成するのが簡単である。

 また、数学的には関係(5.1)(5.2)を用いて、初期値は異なるが全部フィボナッチ数列として一般項を表すことができる。
式で書くとややこしく、図で示したほうが分かりやすいので、
下図の7Γの作製方法を参照下さい。
赤以外の手順は単なるコピーで初期値設定に相当します。
また、無いところは基本的に0と考えます。

【計算過程】

×(1,1,1..,1)

U=

1

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

1

問題1

U7Γ=

21

13

16

15

10

15

9

12

16

10

12

12

8

13

8

10

9

6

10

6

8

239

U7Γ2=

441

377

416

405

350

405

345

384

416

356

392

384

332

377

322

356

345

298

350

298

332

7681

問題2

U7Γ3=

9261

8749

9136

9045

8560

9045

8541

8928

9136

8632

9012

8928

8450

8749

8264

8632

8541

8082

8560

8082

8450

182783

Γの値作製方法と作製結果


【感想ともっと簡単な証明】

 非常に良い問題ですね。
一見ただのパズルに見えたのですが、取り組んでみると大変数学的な問題だったので、驚いています。
結果的に調子に乗りすぎてかなり遠回りしてしまいました。

 問題2では大きな行列を介在させて解答していますが、N=7までの結果(下表)を整理すると、結局、下記の予想漸化式が得られました。
実際これは正しく、問題の見方を文字どおり90度回転すると、とても簡単に証明ができてしまいます。

q\N

1

2

3

4

5

6

7

1

1

1

1

1

1

1

1

2

1

3

7

17

41

99

239

3

1

7

25

109

445

1855

7681

4

1

15

79

593

3905

26943

182783

 以下は簡単な証明から最初に出てくる、殆ど証明アイデアそのものの式(q次元ベクトル計算)です。
具体的なq=2,4についてなら高校生でも容易なので、詳細は譲ります。

ここでCount(LM+1q)pはq回の「N段の移動」のうちでM+1段目の踏みつけ状態がpのビットパターン(qビット)であるもののM+1段以下の状態の数です。
従って必要とする解答値は

Count(S72)0=Count(L72)00とCount(S74)0=Count(L74)0000
です。

下記式から、Count(SN+14)0=Count(LN+14)0000は N〜N−3の場合の数である4項の線形和であることが言えるので、予想漸化式は正しいことが分かります。

もちろんちゃんと展開して計算すれば遠回りしないで係数も直接出るでしょう。


◆出題者のCHECK さんからのコメント。

お二方ともお見事正解です。
(本問の第1問は昭和30年頃に金沢大学で出題されたものです)

1つ気になったのはどちらの解答もまずフィボナッチ数列から入っていることです。
別に間違っているわけではないのですが,階段問題だからといっていきなり先に数列を決めて,後から条件を付加していくと,解答が非常に遠回りになる可能性があります。

例えば以下のような基本形の問題を考えてみます。

(例題)
n段の階段を昇るとき,
1度に昇る段数が1段,2段の2種類であるとき,
その昇り方がf(n)通りあるとして,f(n)を求めよ。

これぐらい単純な構成であれば,
「n+2段目の直前にはn+1段目かn段目にいるので
漸化式はf(n+2)=f(n+1)+f(n)である」
として,直接答えに持っていくことが出来ます。

ところが,「7段の階段」問題のように条件が厳しくなった場合,このように漸化式を立てるのは難しくなります。
かといってf(n+2)=f(n+1)+f(n)に条件を付加していくと立てた漸化式そのもの意味が薄くなりがちです。

そこで考え方を変えてみます。
いかなる場合の数の問題も必ず抽象論が存在するはずです。
ですから漸化式に最初から条件を組み込む方法を考えます。
すなわち1対1対応となる事象を考えます。

1段目からn段目までの各段を
「踏む・・・A,踏まない・・・B」

によって表すと,A,Bの2文字の順列を考えることになります。
「Bが2つ以上連続して並ぶことがない」という条件を組み込みます。

ここでn段目にA,Bがくる場合の数を
それぞれa(n),b(n)とすれば

a(n+1)=a(n)+b(n),b(n+1)=a(n)

という連立ニ項間漸化式が成り立ちます。
(片方の数列を消去すればフィボナッチとなる)

このとき,求める場合の数はa(n)+b(n)です。

この考え方で「7段の階段」問題を解くとコンパクトな解答ができます。
以下,解答。

【解答】
(問題1のみを一般型で解いています)

1段目からn段目までの各段を

昇るときだけ踏む・・・A,
降りるときだけ踏む・・・B,
両方で踏む・・・C

と表すことによりA,B,Cの順列を考える。
ここでn段目にA,B,Cがくる場合の数を
それぞれa(n),b(n),c(n)とすると
「A,Bのどちらも2つ以上連続して同じものがならぶことはない」ので

a(n+1)=b(n)+c(n),
b(n+1)=a(n)+c(n),
c(n+1)=a(n)+b(n)+c(n)

となる。
ただしa(2)=b(2)=c(2)=1である。

これにより求める答えはa(n)+b(n)+c(n)である。

なお,この場合1つの漸化式で表すと

c(n+2)=2c(n+1)+c(n)となり,フィボナッチ数列とは異なったものになります。

要するに階段問題では条件次第で漸化式は様様に変わるのであり,フィボナッチ数列はそのうちの1つに過ぎないということです。
なお問題2も,立てる2項間漸化式は増えますが,対称性から最終的には数列は4つまで減らして解くことができます。

さて,問題1は「1往復」ですが,これは要するに階段を2回昇るのと同じ事です。
そこでn段の階段をN回昇る方法がg(n,N)通りあるとして一般形を考えてみます。

数列f(n,N)を以下のように定めます。
(Cはニ項係数)

f(n,0)=0,
f(2,1)=f(2,2)=・・・=f(2,N)=1
f(n+1,k)=k0f(n,N−k)+k1f(n,N−k+1)+・・・+kkf(n,N)
このときg(n,N)=f(n,0)+f(n,1)+・・・+f(n,N)が成り立ちます。

上で使った条件を最初から組み込む方法と対称性および組み合わせ論から証明が可能です。
これはY.M.Ojisanの解答の一番下にあるものと同じ結果です。


 『7段の階段』へ

 数学の部屋へもどる