例)1258;800;777;584;498;455;21;36;11;5
という10個の数字から、合計が2302となる数値の組み合わせがあるか見つける。
上記の例だと1258+584+455+5=2302という答え。
関数で解決したいです。
マクロは使いたくありません。
これは通常NP問題と呼ばれています。
URLを参照願います。
全部試せば答えがでるが、数が増えると組み合わせの数が多くなり実質的に計算不能になる問題です。
Vector:ソフトウェア・ライブラリ&PCショップ
URLはダミーです。
EXCELを使用して計算する方法を考えます。
(当然数が増えると計算不能になります)
例 1,2,3,4の4つの数の組み合わせを調べる場合
全ての数は(選ばれる、選ばれない)のどちらかであるので
組み合わせの数は2^4=16通りになる。
A1-A16に「1」を入れる
B1-B16に「2」を入れる
C1-C16に「3」を入れる
D1-D16に「4」を入れる
E1=1,E2=2,...,E16=16を入れる
F1-F16に「=MOD(E1,2)」を入れる
G1-G16に「=MOD(INT(E1/2),2)」を入れる
H1-H16に「=MOD(INT(E1/4),2)」を入れる
I1-I16に「=MOD(INT(E1/8),2)」を入れる
J1-J16に「=A1*F1+B1*G1+C1*H1+D1*I1」を入れる
全てのセルを選択しJの列でソートする。
Jの値が求める値になる行が答え
やってみました。2進数を使った総当りですね。
Excelだと、行が65,536までだから、
16個までが限界ですね。
16個以内なら、この方法で解決できますね。
なるほど。総当りしか手が無いんですね。