研究課題 ぴったりの組み合わせ
そよ風さん「博士! 出来ましたよ!途中までですけど」
ナイス博士「やあ、そよ風さんか。早いな。どこまで出来たんだい?」
そよ風さん「最初にまず、配列の中から設定した合計にぴったり合う組み合わせを書き出す プログラムを作りました。」
ナイス博士「どれどれ、さっそく見せてくれ。」
そよ風さん「はい!」
【ぴったりの組み合わせ】
AppletFrame.javaのコード MatchCombination.javaのコード簡単なクラス図
ナイス博士「ほう、ちゃんと動くし、結構早いな!」
そよ風さん「ええ、まともに全部の組み合わせをチェックすると大変なんですけど、 大きすぎて合計を越えると分っている組み合わせを避けるようにしたんです。これを見て下さい!」
*************************************************************************
【ぴったりの組み合わせを計算するプログラムの内容】1.入力された配列を昇順でソートする。
2.配列の小さい方から足して行って、入力された合計値を越えたら、その時のインデックスが 求める組み合わせの最大の要素数となるので、int maxelementとして記録する。
3.再帰を使ったメソッド、getElement(int total,int index)に進む。
4.配列の一番大きい要素を、入力された合計値、totalから引いた数をint dとして記録する。
5.d==0なら、その時の要素ii[index]を、記録用配列に記録して、記録用配列のそこまでの 要素を別な配列にコピーして、その配列をArrayListに記録する。
6.d>0なら、その時の要素を、記録用配列に記録してからgetElement(d,index-1)を行う。
7.それ以外なら、次に大きい要素で同じ事を行う。getElement(total,index-1)
8.要素がなくなったら、戻って次に進む。
*************************************************************************
ナイス博士「ちょっと分りにくいが、要するに、合計値から要素を引いて、まだ残りがあれば さらにそれから次の要素を引いていく、と言う事だな。」
そよ風さん「そうですね。でも、ちょっとおかしいんです。」
ナイス博士「何だい?」
そよ風さん「要素数が多すぎると分っている時は、次に進むように条件分岐して いるんですが、そうしない時のほうが1ミリ秒早く動くんです。」
ナイス博士「そうか。おかしいな。」
そよ風さん「ええ、変ですねえ。」
BB君「博士!出来ましたっ!」
ナイス博士「やあ、bb君!」
そよ風さん「遅いわよ!とっくに出来ちゃったわよ!」
ナイス博士「まあ待ちなさい。じゃあ、見せてくれ。」
BB君「はいっ!...早ければ良いってもんじゃないよ。」
【ぴったりの組み合わせ2】
AppletFrame2.javaのコード MatchCombination2.javaのコード
*************************************************************************
【プログラムの内容】1.入力された配列を昇順でソートする。
2.配列の小さい方から足して行く。
3.入力された合計値を越えたら、最後と一つ前の要素を引いて1つ先の要素を足す。
3.同じ事を繰り返して合計に一致したら記録する。
4.バックトラック法で全ての組み合わせをやってみる。
5.全て終わったら、要素数を1つ減らして同じ事を繰り返す。
*************************************************************************
BB君「バックトラック法を使ったんだ!」
そよ風さん「知ってるわよ!"♪さーんぽすすんで♪にーほさーがるーー"ってやつでしょ!」
BB君「そうだけど、歌が下手だな。」
ナイス博士「そうだな。」
BB君「うるさいわね!!ほっといて下さい!」
ナイス博士「ところで、もっと要素を増やして、色々テストしたほうが良いよ。」
BB君「やったんですけど、スタックのオーバーフローになるんです。」
そよ風さん「まあ!!!しょうがないわね!!!!ワッハッハッハッハ」
BB君「うっ、うるさい!!君のはどうなんだ!!」
そよ風さん「そんなことにはならないわよ。色々やってみれば?」
BB君「よし!!!..............おっ!!何だっ、ちょっとこれを見てみろ!!」
そよ風さん「なっ、何よ!.......あらっ!!」
ナイス博士「どうしたんだい?」
BB君「そよ風さんのソフトの結果がおかしいんです。僕のと違ってます!」
そよ風さん「なっ、何を言ってるのよ!あなたのソフトがおかしいのよ!」
BB君「そんな訳ないだろう!僕はここの首席研究員だぞ!」
そよ風さん「何よっ、それなら私は、特別No.1研究員よ!!」
BB君「なっ、何!それを言うなら、僕は特別秘密捜査官だぞ!!!」
ナイス博士「ちょっと!よしなさい君たち!!!!bb君も、特別機密事項を軽々しく口にするのは やめなさい!!」
BB君「そっ、そうでしたねっ、僕としたことが...」
ナイス博士「ふーーーん、しょうがないなあ。じゃ、私のソフトを出そうか。」
BB君「ええっ、博士のソフトがあるんですか!!」
続く。
」」」」」」」」」」」」」」」」」」」」」」」」」」」」」」」」」」」」」」」」」」」
作者へのメッセージ