tomopinのブログ

ジャンク好き。おもちゃ好き。二人の孫はもっと好き。

CASIO fx-5800Pで「AからBへ回り道しないで行く行き方は何通り?」なプログラム作った

かつて、小学生の頃にこのような問題を解いたことはおありでしょうか。

格子状の通路でAからB(対角線)への最短行き方何とおり?

これ、実はわたくしは全く解いた覚えがなく、お手上げ状態でした。これが小学生の問題とは、日本の教育恐るべし!

数々の問題集を参照してみて、初歩的には以下のように、各コースと頂点に異なる書式で数字を振っていくのが正統な解き方のようです。

格子状の通路でAからBへの最短行き方何とおり?の考え方

すなわち、「0」もしくは「1」と書いてある頂点から出発したルートには「①」とふって、「①」と「①」が出会った頂点は合計して「2」となります。

今度は「2」と書かれた頂点から出発したルートに「②」と番号をふります。で、

「①」と「②」が合流すればその合流点は「3」、そこを出発するルートには「③」、
「②」と「②」が合流すればその合流点は「4」、そこを出発するルートには「④」、
「②」と「③」が合流すればその合流点は「5」、そこを出発するルートには「⑤」、
という具合に、ルートの番号を足し算したものが各頂点の番号になります。

で、最後の到達点に到達する全てのルート(2本ですが)上の番号を全部足したものが答えとなります。

という具合に、頂点とルートに番号を振っていきます。

パターンがそんなに多くはないので、規則性を見出して暗記するのも一つの手です。

例えば、

1列の場合は、その数によって漢字に見立てて、「口」=2通り、「日」=3通り、「皿」=4通り、「口が4個」=5のように、正方形が一個増えるごとに、場合の数が1通りずつ増えていきます。

2列の場合だと、「田」=6通り、「日+田」=10通り、「田+田」=15通り、「田+日+田」=21通りという具合に、「日」(3通り)から始まって、「日」が一個ずつ増える毎に等差を1とする等差数列3、4、5、6、・・・で増えていきます。

まあ、少ない場合はこんな感じで覚えてもいいのですが、こんな単純な形はお受験ではまず出てきません。

例えば、こんなのです。

格子状の通路でAからBへの最短行き方何とおり?実際問題編

これを頂点とルートに番号なんか振ってたら、まず時間が間に合いません。時間どころか、書き間違いと足し算間違い続出間違いなしです。

30~50問近く出題されるのに試験時間は30~50分程度なので、平均1分/1問くらいで解いていくスピードが要求されます。

めちゃ厳しい。

ではどうするか。

種明かしをすると、こうなります。単元的には「場合の数」で、昔やった「順列と組み合わせ」の「組み合わせ」の解き方でこのような式となります。

格子状の通路でAからBへの最短行き方何とおり?<最速解法>

「!」記号は、その前に書いてある数字から、1ずつ引いた数を1までかけ算する記号なのはすでにご記憶にあるかと思います。

たいていの関数電卓には「!」ボタンがあります。しかし、このCASIO fx-5800Pにはそんなボタンはありません。

数字を打ったのち、「FUNCTION」→「1:MATH」の「1」→「5:X!」の「5」を押すと、数字「!」となって、ここで「EXE」を押すと、

(数字)×(数字ー1)×(数字ー2)×(数字ー3)・・・×1が計算されます。

ちょっと面倒な手順ですが、関数として存在はしています。

この関数「!」はダッシュと読むようです。

今回は上にあるように、この「!」を連発して解きます。

すなわち、

  (ヨコのルートの本数+タテのルートの本数)!を
{(ヨコのルートの本数)!×(タテのルートの本数)!}
で割り算したものが答えです。

「nCr」とかいうやつですね。この謎の記号「C」は「組み合わせ:Combination」の頭文字で、もう一個あった「nPr」の「P」は「順列:Permutation」の頭文字です。長年の謎だった記号の起源。

で、こんなに単純な問題で終わるわけもなく、追加の(2)とかで、その中のC点を必ず通る場合を聞いてきたりもします。

こんな感じです。

格子状の通路でAからBへ必ずCを通っていく最短行き方何とおり?

ここでだいたいがお手上げ状態となります。

これは実は慣れていれば簡単で、以下のように解きます。

途中のC点を必ず通る場合の考え方

C点を通るために通る可能性のない道を全部消してみます。
すると、C点でくっついた格子ブロックが2組できますので、それぞれに分けて、かけ算するだけです。

<積の法則>

A点からB点までは「船、車、自転車」の3通りが選べて、B点からC点へは「飛行機か電車」の2通りしかない場合、A点からC点までの行き方は3×2=6で6通りとなるようなかけ算が「積の法則」というようです。さらにC点からD点まで交通手段が4通りあったとすれば、A点からD点はさらに4をかけて、24通りとなります。

上の例では、最初のブロックでどのルートを選んでも、次のブロックの組み合わせには影響しないような場合に「積の法則」という難しい言葉が成り立ちます。

 

では、上の格子状ルートの例で、「C点に怖いワンちゃんがいて、ここだけは避けたい」という逆の問題が(3)の問題です。

さて、どうしますかね。

これは、(2)の問題を先に解いておいて、全体のルートの行き方から引き算します。

 

C点を通らない行き方⇒(全体ー必ず通る行き方)

実に簡単なんですが、(2)を先に解いておかないと解けません。

上の①はルートのイメージのためで、計算には関係ありません。

(2)の問題なしにいきなりこちら「ある点を通らない行き方」を聞かれた場合には面喰いますが、まずは「必ず通るパターンを計算して、全体から引き算する」、と記憶の片隅にとどめておきます。
どうでしょう、これなら3問あっても3分程度で解けるのではないでしょうか。特に最後の問題は(1)と(2)が解けていれば、殆んど一瞬です。

 

それではっ!!!

3次元の場合はどうでしょう。たまにこちらも出ることがあります。

↓こんなやつです。いや、こんな単純なのは試験には出ません。3行目の2列以上になったやつです。

直方体ブロックのルートでAからB(対角線)への最短行き方何とおり?

これも小学生用の問題集の解答・解説では、下の図のように、頂点とルートに番号を振って解かせていますが、こんなの、小学生の試験時間中にはほとんど不可能と思わないのでしょうかね。そもそも何に使うねん、て話。

直方体ブックでAからBへの最短行き方何とおり?

これは察しのよい方はすぐにピンとくると思いますが、2次元の式を数学的に3次元に展開するだけです。

上の図の黄色い四角で囲んだ式で解けます。

こちらは複雑になるのか、必ずC点を通るとか、通らないの問題はまず見たことがありません。小学生のレベルでは、全体の数だけ解ければオッケーです。

 

さて、大変長らくお待たせいたしました。

この式をCASIO fx-5800Pで一瞬で解けるようにプログラムしてみたいと思います。というか、式が単純なので、これも一瞬で作れてしまいます。

どの順番でもいいのですが、上の図の3行目のブロックを参考に、
タテ「1」×ヨコ「2」×高さ「5」としましょうか。

プログラム名は「CUBIC-COMBINE」としました。あまり合ってる気がしませんが。とりあえず、プログラムを起動すると、

「CUBIC-COMBINE」起動直後の画面「X=?」

まず、「X」を聞いてくるので、この例では「1」と入れて、「EXE」、

次に、「2」といれて、

「Y=?」のYの入力画面

「2」と入れたら、ここも「EXE」。すると「Z=?」と聞いてくるので、例に従って、「5」を入力、

「Z=?」のZの入力画面

数字を入れたら、必ず「EXE」です。で、3つ入れたので入力完了。

そうすると、

出力画面

「ヨコ1×タテ2×高さ5のブロックの対角線方向への最短行き方は168通り」、と瞬時に吐き出してくれます。お下品でした。出力してくれます。

プログラムリストは以下の通りです。「COMPモード」で作成します。

表示命令部分だけが冗長で、式はたったの1行です。

「CUBIC-COMBINE」プログラムリスト
表示用のLOCATEでは、「各入力を2桁に限定」が前提です。
これより大きな桁数を入れる場合には
最後のLocate文だけ残して前のLOCATE文6行は削除。
2桁の時点ですでに天文学的な数字になります。

これも実生活では99.99%以上、使う頻度のないジャンキーなプログラムですが、お受験狙いの小学生の子供がいる家庭だと案外重宝するかもしれません。しかしっ!

「!」キーのある関数電卓なら手計算の方が速そうです。この機種ならではのプログラムと言えそうです。まさにジャンキー。

ちなみに、

2次元の場合は、最後の「高さ」で、「Z」=「0」と入れます。

「1」ではありません。「0」です。気持ち的にも論理的にも正しいですね。

数学的な取り決めで、この「!」関数のみ、「0!」=1という、ちょっと矛盾したような取り決めがあるようです。電卓もそれに従っていますので間違いない。

「0」になんかをかけて「1」になるとは、ちょっと意外ですね。おかげで式の汎用性が保たれてありがたいことはありがたいですが。

役に立たないジャンキー・プログラムどんどんいきますかねー。