これを、パソコンで、ビジレスで、解いてみようと・・・。
[設問]
A、B、C、D、Eの5つのお皿には、それぞれいくつかのキャンディーがのっています。
このうち1皿を取るか、
つながった2つ以上のお皿を取ることによって(たとえば、AとB、DとEとA、など)
お皿の上のキャンディーで、
1から21までの個数を作ることが、できます。
それぞれのお皿にのっているキャンディーの個数を求めなさい。
A E
B D
C
(95年度算数オリンピックトライヤル問題[7]より)
この算数オリンピックの設問は、算数オリンピック問題集(小学生/中学生・知の祭典)から、
選ばせてもらって、載せています(先方には、ご了解を得ています。感謝をしています)。
図形に関するものなど、私には、手の出せないものは、はずしています。
この設問も、本当ははずしたほうが良かったのかもしれません。
見通しが付かないうちに、始めていました。
スッキリとした処理方法があったのかもしれません。
Eプログラムは、10ページになり、処理時間は、7分かかることになってしまいました。
まず、5つのお皿があるのですから、その、並ぶ組み合わせを、表にしようとしました。
99,999行の、限度ぎりぎりの表を作って、A列に、1〜99,999の数字を入れました。
そして、それぞれの桁ごとに、数字を分けて、G〜K列に、入れました。
そして、1〜5の数字以外を含む行は、除きました。

Eプログラム内の<■■1■■で、止めた時のファイル内容です。
1〜5の数字以外を含む行を除いたところ、3,125行に、縮まりました。


5つのお皿に番号を付けて、その組み合わせを見るのですから、
その組み合わせ内には、同じ番号のお皿はありえません。
そこで、同じ番号のある行は、除きました。

その結果、Eプログラム内の<■■2■■では、120行になりました。
このファイルに、9-SAVE-120 と、名付けました。
コレは、後半で使います。


これは、別の表です。
5つの数で、それを単独や、それぞれを加えることによって、
1〜21の数字を作ることが出来る組み合わせを、作ります。
99,999桁をオーバーしないように、途中でも、データを減らしていきました。


<■■3■■では、20,349件に、押さえました。


<■■4■■では、この組み合わせで、合計が、21 になるものだけを、残しました。
これで、10件に。このファイルは、 9-SAVE-10 と名付けました。
これも、後半で使います。
G〜K列が、メインとなる場所ですが、同じものを、B〜F列にも、置きました。
これで、並べる位置を変えるときに、B〜F列から、G〜K列に、持って行くことにしました。





























































