アプリ版:「スタンプのみでお礼する」機能のリリースについて

はじめまして、こんにちは。

エクセルというか、数学的な質問になるかもしれませんが、困っておりまして
お知恵をお借りできればと思い質問させていただきました。

問題が
【A】【B】【C】【D】【E】とあり、
それぞれの項目には0~12の数字が入ります。
A+B+C=12 かつ、A+D+E=12 になる条件の時、
そのパターン数、及びそのパターンを表示(一覧として出したい)するには
どうしたらいいでしょうか・・・。
(A~Eにはもちろん同じ数字も入ります。)

エクセルで挑戦しましたが、行き詰まってしまいました。
数学的な問題かもしれませんが、何かいい方法があれば・・・。

申し訳ありませんが、どうぞよろしくお願いいたします。

A 回答 (3件)

ん~、一般的な解法(?)を考え始めると確かにやっかいなのですが、


ご質問のケースに限って考えるならば、
非常に強い制約がついているので比較的簡単に求まります。

・Aは0~12まで自由にとれる
・A=NのときB,Dは0~12-Nの範囲で自由にとれる
・B,Dは互いに干渉しない
・B,Dが定まれば、自動的にC,Eも定まる

つまり、
A=0のとき、B:13通り × D:13通り
A=1のとき、B:12通り × D:12通り
以下同様

というわけで、
総数=13^2+12^2+…+1^2=SUMPRODUCT(ROW(1:13)^2)=819通り

パターンを書き出すには、
1行目を、
 A1:0
 B1:0
 C1:12
 D1:0
 E1:12
2行目を、
 A2:=IF(COUNTIF($A$1:A1,A1)=(13-A1)^2,A1+1,A1)
 B2:=IF(A2<>A1,0,IF(D2=0,B1+1,B1))
 C2:=12-B2-A2
 D2:=IF(A1<>A2,0,IF(D1=12-A1,0,D1+1))
 E2:=12-D2-A2
として、2行目を{12,0,0,0,0}が返るまで下方にフィル。

もっとも、↑は、「組み合わせを求めている」というよりも、
あらかじめ判っている「組み合わせを書き出している」だけですが…。

VBAでやるならこんな感じでしょうか。
-----------------------------------------------------
Sub Sample()
 i = 0
 For a = 0 To 12
  For b = 0 To 12 - a
   For d = 0 To 12 - a
    i = i + 1
    Cells(i, 1) = a
    Cells(i, 2) = b
    Cells(i, 3) = 12 - (a + b)
    Cells(i, 4) = d
    Cells(i, 5) = 12 - (a + d)
   Next d
  Next b
 Next a 
 MsgBox i & "通り"
End Sub
-----------------------------------------------------

いずれもExcel2003で動作確認済。
以上ご参考まで。
    • good
    • 0
この回答へのお礼

ありがとうございます!!
条件定義がよくわからず、数式が組めずにおりました。

全パターンを出したいわけではなかったので、
引き算でできるかな?と思っていたのですが、そう甘くなかったことを
今回痛感しました^^;;;;

ばっちりでした。本当に助かりました!
ありがとうございます!!

お礼日時:2008/01/23 10:40

ナップザック問題は難しいですよ。

今回はエクセルを使用して力ずくで回答を求める方法を説明します。ただしExcel2007が必要です。

今回の質問の場合各セルの取りうる値は0~12の13種類あります。
A~Eの5つがありますからすべての組み合わせは13^5=371293通りです。(「^」はべき乗)
Excel2003までは最大行数は65536行ですから全ての組み合わせをシート上に作成できません。これが2007が必要な理由です。

新規シートのA1セルに以下の式を入れて、右方向にE列までと、下方向に371293行目までコピーします
 =MOD(INT((ROW()-1)/13^(5-COLUMN())),13)
これで全ての組み合わせが表示できました。

この中で「A+B+C=12 かつ、A+D+E=12」のパターン数は
 =SUMPRODUCT((A1:A371293+B1:B371293+C1:C371293=12)*(A1:A371293+D1:D371293+D1:D371293=12)*1)
で求まります。ただし処理時間はとんでもなくかかるかもしれません

また全ての組み合わせを表示したかったらF1セルに
 =IF(AND(A1+B1+C1=12,A1+D1+E1=12),"○","")
を入力して最終行までコピーすれば、条件に合致するセルは「○」が表示されますから、フィルタでその行だけを表示させればよいでしょう。

今手元にあるExcelは2003なので0~8までの数字でしかテストできませんが(9^5=59049<65536行)、「A+B+C=12 かつ、A+D+E=12」は429パターンありました。
    • good
    • 0
この回答へのお礼

社内に1台しか2007が入っているPCが無いのですが、
何とか使わせてもらって確認してみたいと思います!
ありがとうございます。

こんなにパターンがあったんですね・・・。
ある程度条件がたくさんあるので、1000も無いと思ってました・・・。

とっても勉強になりました。
ありがとうございます!

お礼日時:2008/01/23 10:44

検索:ナップサック問題 エクセル


http://www.google.co.jp/search?sourceid=navclien …
いろいろあります。
    • good
    • 0
この回答へのお礼

参考URLをありがとうございます。
そんなに複雑な問題だったんですね^^;;;

数学的な知識は皆無のため、勉強しないといけないと
思いました・・・。

ありがとうございます。

お礼日時:2008/01/23 10:42

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!