- 締切済み
VBで組み合わせのプログラムができなくて困ってます。
下記のようなグループがあります。 List1=100、200、300、400、500 List2=150、200、250、300、350 List3=50、100、150、200、250 ここで、それぞれのListから複数選択し、合計が700になる 組み合わせをVBで、表示したいのです。 例えば、List1から300、500を選択。 List2から150、200、250を選択。 List3から50、150、200を選択。 この場合の答えは、 List1:300 List2:200 List3:200 List1:300 List2:250 List3:150 List1:500 List2:150 List3:50 が答えなので、これを表示したいのです。 まったく分かりません。。。宿題の締め切りがちかいので、どなたか助けてください~(>_<)
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- tyome2
- ベストアンサー率21% (28/132)
もうちょっと頑張ってみてくださいな。 人間の場合も、コンピュータの場合も一緒です。 まず、List1から300と500を選択しました。 単純に考えて二つの事を一気にやるのは無理ですよね。 じゃまず300から考えます、 List2の一番目には150が入ってますよね。 次にList3の一番目には50が入ってます。300、150、50を足しても700ではないです。 それじゃList3の2番目には100がはいってます。300、150、100を足しても700にはなりません。 これをList3の5番目までします。 で今度は、List2に戻って2番目の値を取得する200ですよね。 次に List3の一番目には50が入ってます。300、200、50を足しても700ではないです。 それじゃList3の2番目には100がはいってます。300、200、100を足しても700にはなりません。 それじゃList3の2番目には200がはいってます。300、200、200を足しても700になりました。では、出力or保存する。 これをList3の5番目までします。(List内には同じ数字ないと分かっている場合) ってな感じで出来ませんか。 2重ループ、配列を使えば余裕です。 頑張って解いて下さい。
- shukugawa
- ベストアンサー率30% (80/264)
データを配列に格納して、総当りで判定すれば良いと思います。 今VBの環境がないので、ソースはやや適当ですが大体こんな感じでしょうか。 dim List1(4), List2(4), List3(4) 'ここで配列にそれぞれの値を代入 dim i, j, k for i = 0 to 4 for j = 0 to 4 for k = 0 to 4 if List1(i) + List2(j) + List3(k) = 700 then 'ここで表示の処理 endif next next next
お礼
ありがとうございます! 考え方は分かるのですが、VBで書くことができません。。。 ほんとにVBの知識がなさすぎて、恥ずかしいです。
お礼
とても分かりやすいです!ありがとうございます!! でも、ごめんなさい、2重ループや配列のVBでの書き方が分からないんです。。学校では、C言語を学んできました。なのにVBで宿題をだされてしまいました。がんばります、ありがとうございます。