• ベストアンサー

組合せ 

ARCの回答

  • ARC
  • ベストアンサー率46% (643/1383)
回答No.4

手元のアルゴリズム辞典では、2進数を利用して解くやり方が紹介されています。 例えば、データの個数が8個だとすると、8ビットの2進数を用意してやって、00000001, 00000010, 00000011, …, 11111111 と、順に1ずつ足していきます。そしてそれぞれの過程で1の位置と対応するデータを取り出せば、8個のデータの全ての組み合わせが判定できるわけです。 面白そうなのでちゃちゃっと作ってみました。長整数型を使って最大31個の数値の組み合わせを得ます。 ちなみにデータ数を31と指定する(N=30)と、40億以上の組み合わせを走査しなくてはならなくなる為、開始したら最後、待てど暮らせど終了しない事態に陥ると思います。 Sub test()   Const MOKUHYO As Long = 10 '目標値   Const N As Long = 13 '(データの個数 - 1)を設定する。1~30を設定。   Dim p() As Long 'データ      Dim i As Long, j As Long   Dim Tag As Long   Dim Goukei As Long   Dim Table(30) As Long ' 1,2,4,8,16…を格納する   Dim Counter As Long       'データを乱数で初期化する   ReDim p(N) As Long   For i = 0 To N     p(i) = Int(Rnd() * 11) - 5 '-5~5の乱数をセット   Next i '処理開始   'テーブルの初期化   For i = 0 To 30     Table(i) = 2 ^ i   Next i   '主処理   For i = 1 To 2 ^ N     Goukei = 0     For j = 0 To N       If (i And Table(j)) <> 0 Then Goukei = Goukei + p(j)     Next j     '合計の判定     If Goukei = MOKUHYO Then       Counter = Counter + 1       For j = 0 To N         If (i And Table(j)) <> 0 Then Debug.Print p(j) & " ";       Next j       Debug.Print     End If   Next    'けっかほおこく   Debug.Print   For i = 0 To N - 1     Debug.Print p(i) & ", ";   Next i   Debug.Print p(i)   Debug.Print Counter & "個の組み合わせがあります。" End Sub

関連するQ&A

  • 複数の数字の組み合わせの中から合計がAになる組み合わせを探す方法

    例えば、1~10の数字があって、その中から合計が10になる組み合わせを探す、という計算式はExcelで作成することはできますか?(答えは[1+2+3+4][1+2+7][1+3+6][1+4+5][1+9][2+3+5][2+8][3+7][4+6]の9通り) もしくは、複数の組み合わせで計算させて、合計が10になったものを検索するという計算式は可能でしょうか? よろしくお願いします。

  • nCr 組合せ数字からの順位の逆算

    1~100までの3つの数字の組合せでは、 1番目  1、2、3 2番目  1、2、4   ・   ・   ・ 161700番目 98,99,100 となりますが、任意の3つの組合せ数字が何番目なのかを求める方法はあるのでしょうか? このケースでは、2、3、4の組合せは4951番目になる。というような事です。 これは単純に 100C2 + 1 で計算しました。 このようにnとrの数値を変えて加算していけばできそうな気もするのですが繰り返し計算が多すぎて混乱しています。 もっとシンプルな方法はないのでしょうか?

  • エクセル関数について

    エクセル関数での計算式を教えてください。   3 5 -4 -9 8 11 -1 -5 8 と、数字がありますが、プラスの数字の合計とマイナスの数字の合計をそれぞれに計算したいのですが、どんな関数を使用し、又計算式を教えてください。

  • 応用した計算式を教えて欲しいです。

    皆さん、すいません、1つ下ぐらいに質問した者ですが、 基本の計算式を教えてもらったのですが、応用した計算式ができず 困っていまして、できましたらもう一度ご教授ください。 Aの1~3000までのセルの中に ランダムなプラスの数字、ランダムなマイナスの数字が縦にランダムに並んでます。 (例えば、0.54、0.15、0.3、0.015などが連続で並んでいたり、-0.57、-0.01、-0.25が連続で並んでいたり、0.25が1回だったり、-1.2が2回連続だったり、0があったり、等々) ※0も出現するので、その時はプラスマイナスゼロ扱いでお願いします。 0.54 0.15 0.3 0 0.015 -0.57 -0.01 -0.25 0.25 0 -1.2 -1.2 0 -1.2 その時に、 プラスの数字が並んでいる数の合計、 マイナスの数字が並んでいる数の合計、 を隣のセル(どこでもいいです)に出したいのですが、 この計算式のやり方がわかりません。。。 上記の例なら、下記のような答えになるはずなんです。 1.005 -0.83 0.25 -3.6 皆さんよろしくお願いします。

  • 組合せ問題

    組合せの問題です 以下の10個の数字のうち、5個を任意に選んで合計が「19」となる組合せはいくつあるか。 1,1,2,2,3,3,4,4,5,5 これを計算で求めるにはどうしたらよいでしょう? ※ この問題では合計「19」で、選択する数字も10個(重複2個迄)しかありませんが、これが大きい数字となるととても場合分けで上げきれません。

  • Excelの組み合わせをカウントしたいです。

    こんにちは。 Excelの組み合わせをカウントしようと試行錯誤したのですが 未だに完成出来ないので質問させて頂きます。 A列に1から10までの数字がランダムで500行ほどあり、 A列の中で1と言う数字があった場合、 その下のセルに2があればその組み合わせを1とカウントし、 B列に合計を表示したいのですが、これは可能でしょうか? どうかご教授下さいますよう、宜しくお願い致します。

  • エクセルの計算式でオートサムで単純にセルの合計を計算表示したいのですが

    エクセルの計算式でオートサムで単純にセルの合計を計算表示したいのですが マイナスの数字もプラスと認識して合計表示する方法教えて下さい

  • EXCEL関数で数字の認識のさせ方

    エクセルで、あるセルの数値がマイナスの値だった場合はこの数式、プラスだった場合はこの数式で計算という風にネストを組み立てたいのですが、プラスとマイナスの数字の認識のさせ方がうまくいきません。 数字のプラスマイナスを認識させる方法ってあるのでしょうか? 「""」で囲ってというのはわかるのですが・・・。

  • エクセルで組み合わせ計算

    質問があります。エクセル使えば計算とか、いろいろ覚えれば簡単に出来ると言われ前に組み合わせ計算教わった記憶が、あるんですが忘れてしまったので分かる方教えて下さい。 質問内容は、 数字で1・2・3・4・5・6・7があります。 7個の数字を3個ずつ組み合わせしたいんです。 (1・2・3)(1・2・4)(1・2・5)このような感じ何ですが 同じ数字がダブらない様にしたいんです。途中で(2・3・1)があると先に書いた(1・2・3)があるので×何ですが全部で35通りの組み合わせになると思うんですが、この様な計算も1欄で組み合わせ表示が出来るんでしょうか? また、この程度のエクセルレベルは初級位でしょうか? 宜しくお願いします。

  • 3つの数の組み合わせの求め方

    情けない質問なんですが、朝からずっと考えていて結局あきらめました。 1~18まで3つの数字を組み合わせる場合の式を教えてください。同じ数字の組み合わせはありません。 18までだと816通りありますが、例えば12までの組み合わせが何通りになるかと言う計算式が知りたいのです。 最初 1-2-3 2番目 1-2-4 … 18までの場合の最後16-17-18 よろしくお願いします。