• ベストアンサー

たくさんある数字の中から、どれを足せばその数字になるかわかる方法ってありますか?

タイトルどおりなのですが、数字を自動検索するような方法ってありますか? 文章ではわかりにくいので、例を出しますと 13 8 2 の数字の中で、何個か数字を足して10という数字を作らなければいけない。 この場合、8と2を使うと10になります。 その8と2がわかるようなソフトとか、計算方法とか、エクセルの使い方とかわかりませんでしょうか? 数字の数が半端ではないので、いちいち手計算していると時間がかかってしまうのです。 よろしくお願いします。

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

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.3

いわゆる「ナップザック問題」だと思います。(もともとすごく時間のかかる問題です) 上記で検索してみるといろいろアルゴリズムが引っかかると思います。 とりあえず、過去にエクセルで似たような質問&回答がありましたので、挙げておきます。 http://okweb.jp/kotaeru.php3?q=1255891

参考URL:
http://okweb.jp/kotaeru.php3?q=1255891

その他の回答 (3)

  • pori_boy
  • ベストアンサー率60% (18/30)
回答No.4

こんにちは No.3の方の書いているとおり、この問題は ナップサック問題(もしくはナップザック問題)と 呼ばれる問題で(数学的に)結構難しい問題です。 この問題に対する解法で教科書レベルのものは2種類 あり、それぞれの得意・不得意な入力のタイプがあります。 1. 数字の数(n種類とする)が少ない場合 足し算のときに各数字を使う・使わないというのを 全とおり考えるとすると、組み合わせの数は2^n。 nが15くらいですと30000種類程度なので エクセルのVBAなどで十分対処可能になります。 (No3のリンクからたどることができます) もし、Java,Cなどでのプログラミング環境があれば (計算速度がエクセルとは段違いに速いので) nが20くらいなら工夫なく実用化できると思います 2. 目標とする数(mとする)が小さい場合 動的計画法という手法を使うとnm回くらいの計算で 答えを見つけることができます。 例えば数字が100種類あって、目標値が1000という ような状況にはこちらの方法が向いています。 どちらでもない(数字の種類も多いし、目標値も 大きい)のであればかなり真剣に取り組まないと いけないかもしれません。 状況をもう少し説明してもらえば、踏み込んだ アドバイスができる可能性があります。

  • SaySei
  • ベストアンサー率32% (528/1642)
回答No.2

とりあえず、方法としてはExcelのVisualBasicEditorでマクロを組むという手があります。 すみません、あまり参考になりませんね(汗)

  • 8942
  • ベストアンサー率13% (188/1414)
回答No.1

足して10になる2つの数をA,Bとすると、   A+B=10  A=a+(10-b)  B=-a+b a:任意の整数 0<b=<10 の整数 こんな感じでしょうか?  自信なしです。