• ベストアンサー

合計が決まった数で、数の組み合わせを求めるには

 ちょっと数学的な問題を、パソコンで解きたいと思います。  合計が決まった数で、ある数の集まりの中からその和の組み合わせを求めたいのですが、何を使ってどのようにすればよいでしょうか。  ソフトは、Excel/Access/FileMakerがあります。  回答でなくても、自分ならこうやるよ、という意見も大歓迎です。  よろしくお願いします。 (例題) {2550,1210,90150,110223,17112,142816,87442,14650,1701413,11788,4460,24180}の中で総和が1949096になる数の組み合わせは?

質問者が選んだベストアンサー

  • ベストアンサー
  • wolv
  • ベストアンサー率37% (376/1001)
回答No.1

すべての組み合わせについて合計を計算し、与えられた数と一致するか比較するプログラムを書いちゃいます。 InternetExplorerがあれば、JavaScriptが使えるはずなので、 それで書いてみます。下記の内容のファイルをたとえば、kumi.html という名前で保存し、IEで開けば結果が表示されます。 <pre> <script> input="2550,1210,90150,110223,17112,142816,87442,14650,1701413,11788,4460,24180" sum=1949096 data=new Array(20) data=input.split(",") n=data.length //一応、入力値の解釈が正しいかどうか表示してみる。 for(i=0;i<n;i++){ document.writeln(i+" "+ data[i]) } // curent_sum = Σ flag[i]*data[i]  // データ数分の和を計算する。flag[i]は、0か1の値をとる。 // 配列useをいろいろなパターンで生成することですべての組み合わせを調べる。 flag=new Array(n) n_ans=0 //見つかった答えの数 ni_no_n_jou = Math.pow(2,n) //2^nとする言語が多いが、JavaScriptではMath.powを使う。 for(j=0;j<ni_no_n_jou;j++){ make_flag_array(j) //サブルーチン、下で定義されている。 cur_sum=0 for(i=0;i<n;i++){ cur_sum += flag[i]*data[i] } if(cur_sum==sum){ n_ans++; write_ans() } } function make_flag_array(j){ tmpj=j for(i=0;i<n;i++) { amari = tmpj % 2 flag[i]=amari tmpj = (tmpj - amari)/2 } } function write_ans(){ document.writeln("答え("+n_ans+"): ") for(i=0;i<n;i++){ document.write(" + "+flag[i]*data[i]) } document.writeln() } </script> </pre>

参考URL:
http://tohoho.wakusei.ne.jp/js/math.htm#xMath,http://tohoho.wakusei.ne.jp/js/string.htm,http://tohoho.wakusei.ne.jp/js/o
toshihiko_ooishi
質問者

お礼

 私はてっきりVBAを使った回答が来ると思っていましたが、JavaScriptとは度肝を抜かれました。  すばらしいです!有難うございました!

関連するQ&A

  • Excelで、数字の組み合わせの合計が一定数になるパターンの抽出

    Excelで、数字の組み合わせの合計が一定数になるパターンの抽出 たとえば、つぎの配列があるとします。 A(5){10,20,30,40,50}要素数が5つ1..5、{}は内容 このなかで二つ以上の組み合わせで和が60になる組み合わせを出したいとします 答えは パタン1:1,2,3  /* 10+20+30 */ パタン2:1,5 /* 10+50 */ パタン3:2,4 /* 20+40 */ 同じような処理をExcelの関数では実現できますでしょうか? また上記のような組み合わせのパタンの総数を求める公式はありますか? 初歩的な高等数学で恐縮です。

  • ナンバーズ4の各桁の合計数がNのときの組み合わせの数

    ナンバーズ4についての質問です。 ナンバーズ4の各桁を合計した値をNとします(0≦N≦36、Nは自然数)  ⇒ナンバーズ4は0000~9999の中から数字を選択するため 各桁の合計値がNのときにナンバーズ4の組み合わせは 何パターンあるのか求める方法を教えてください。 例)N=0のときは0000の1パターン   N=1のときは0001 0010 0100 1000の4パターン これを上記のようなアナログなやり方ではなく 数式で求めたいのです。 よろしくお願いいたします。

  • NBS4 組合せ

    数学が苦手な私ですが、ナンバース4の合計が19に なる組み合わせをパソコンで計算さす方法を教えてください。 高校で習った順列組合せでnCrというのがあったが、 「0-9の中から四個選ぶ」はこれで出来るのかと 思うが、合計が19になるのはどうするのでしょうか?

  • c言語のプログラム

    「1」が3枚、「3」が3枚、「5」が3枚、「7」が4枚、「9」が5枚で合計18枚のカードがある。このカードを並べて6桁の数を3個作り、その3個の数の総和が「1234567」となるカードの組み合わせをすべて求めたいのですがどうすればよいか全然分かりません。 6桁の数を配列で表現し、和を求めるときに1の位から上位の桁へ順番に和が一致しているかチェックするのを、再帰呼び出しででしたいです。

  • Bingo5 合計数 164

    Bingo 5 合計数 164の表示(計算結果) ビンゴ5が今春から発売され、注目している。 合計数は148から180になるが、中心値は164 他のロト6,7でも合計数を重視しているので 今回も164になる組み合わせを計算する Excel VBAコードを教えてもらいたい。 Sub bingo5 () dim i,j,k,l,m,n,o,p,q as integer Dim r as integer r=0 for i=1 to 40 for j=1 to 40 if J<i then goto next _j end if 等々と参考までに描きましたが、 ビンゴ5は枠の数字が決まっており A (1 - 5) B(6-10) C(11 -15) D(16-20) E(21-25) F(26-30) G(31-35) H(36-40) つまりA-Hまでの数字は決して重複しない。 組み合わせは390,625通りあるが、合計数および 奇数偶数のK4G4まで絞り込めば面白い。 その中で合計数が164になる組み合わせを 選び出すコードを教えて頂きたいのです。

  • c言語の問題

    c言語のプログラム 「1」が3枚、「3」が3枚、「5」が3枚、「7」が4枚、「9」が5枚で合計18枚のカードがある。このカードを並べて6桁の数を3個作り、その3個の数の総和が「1234567」となるカードの組み合わせをすべて求めたいのですがどうすればよいか全然分かりません。 6桁の数を配列で表現し、和を求めるときに1の位から上位の桁へ順番に和が一致しているかチェックするのを、再帰呼び出しででしたいです。

  • 場合の数の組み合わせについてお願いします。

    以下の問題についてどなたかよろしくお願いします。 問題 クリ カキ リンゴがそれぞれダンボール一箱ずつある。 (1) これらの中から合計5個を選びたい。その選び方は何通りか。 (2) クリ カキ リンゴをそれぞれ少なくとも一個は入れて 合計5個を選びたいその選び方は何通りあるか。 以上の(1)と(2)の問題ですが。 (1)も(2)も樹形図を書くと簡単にできますが 問題集の答えには (1) 組み合わせ7c2とあります。答えは樹形図と同じ21通りです。 この7と2はどのように考えるのですか? 又(2)も同じく 組み合わせ4c2とあります。答えは樹形図と同じ6通りです。 これも同じく4と2はどのように考えるのですか? これらの問題は数も少なく数え上げても出来ますが 大きな数字になった場合どのように考えているのかとても知りたいです。 質問A 組み合わせだとは分かりますが又組み合わせの計算もできますが どうして、(1)は7と2と考えるのか (2)は4と2と考えるのか全く理解できません。 どなたか中学生に教えるように教えていただけないでしょうか。 質問B 又(2)は少なくともとありましたので、すぐに余事章が頭にひらめいて しまい、頭がこんがらがってしまいました。 質問ABをどなたか分かりやすく教えていただけないでしょうか? この問題が分からないと私は順列や組み合わせが分かっていないと 考えないといけないでしょうか? よろしくお願いします。教えて下さい。

  • 場合の数

    1から5の整数が書かれた赤玉5個と、1から5の整数が書かれた白玉5個、合計10個の玉が袋の中に入っている。この袋の中から3個の玉を同時に取り出すとき、取り出した玉に書かれた数について、以下の問いに答えよ。 取り出した3つの玉に書かれた数の和が4であるとき、玉の取り出し方は??通り、3つの玉の数の和が5であるときの玉の取り出し方は??通り、3つの玉の数の和が6であるときの玉の取り出し方は??通りである。 大変申し訳ないですが、途中式も掲載してくれたら助かります。 ご回答お願いします。

  • 数A《場合の数》急いでいます!!!

    明日、数Aのテストがあり、勉強していたところ、どうしても分からない問題があったので質問します。 場合の数の問題なのですが 『大中小3個のさいころを同時になげて、目の和が9になる場合は何通りあるか。』 というものです。 自分で考えてみたんですが… 始めに3つの数で和が9になるものの組み合わせを1~6の中で探しました。 すると全部で (1,2,6),(1,4,4),(1,3,5),(2,2,5),(2,4,3),(3,3,3)の 6つありました。 かっこ内の数は3つなので 順列を考えると3!になり、それが6つなので 3!×6=36 だと考えたのですが… 答えは25でした。 どうしたら25になるのですか?? よろしくお願いします。

  • 場合の数について

    数学の、場合の数の問題です。 袋の中に、1から9までの番号が書かれた玉が1個ずつ、合計9個入っている。この袋の中から、1個の玉を取り出して番号を調べ、袋に戻す。次に再び袋から1個の玉を取り出して番号を調べる。 2つの番号の積が奇数になる場合は何通りあるか。 という問題で、解答は 2回とも奇数の書かれたが取り出される場合であるから、5x5=25とおり ですが自分は、例えば取り出した玉が(3,7)という時と、(7,3)という時を区別せず、これらは1とおりと考えてしまいました。つまり同じ数同士の取り合わせ( (3,3)など )以外は2つの数の順序を入れかえれば同じ組み合わせが存在すると考えて、5+(25-2)/2=15とおりと考えました。(「5」は同じ数同士の組み合わせの個数の意味)。これではダメな理由は、やはり1番目に取り出した数と2番目に取り出した数を区別するからでしょうか?区別するかしないかでいつも迷うのですが、、よろしくお願い致します。