• 締切済み

左に書いてある数字から(その数字は一回しか使えません)選び、足した値が 220,103にできるだけ近くする数式はありますか?

1,890 左に書いてある数字から(ただしその数字は一回しか使えません)選び、足した値が 220,103にできるだけ近くする数式はありますか? 2,100 2,000 3,000 3,203 1,597 5,642 2,834 5,228 4,336 5,953 500 3,358 5,000 2,268 2,944 1,130 4,000 2,706 1,643 1,000 2,947 500 3,835 1,955 3,540 2,866 2,843 3,705 2,421 500 3,000 300 6,143 3,876 2,000 3,425 1,000 4,220 3,260 4,323 3,837 3,518 2,000 2,284 2,563 4,274 2,000 1,000 5,105 1,000 4,200 1,000 2,000 2,091 4,770 4,085 3,265 4,160 3,636 4,109 4,417 4,526 3,706 3,500 1,000 500 5,141 10,000 6,016 3,000 2,000 4,707 4,330 2,000 3,946 3,993 680 501 4,268 6,201 5,000 3,200 4,020 4,916 3,472 2,000 5,000 4,627 1,000 2,278 4,234 1,483 4,198 3,000 5,000 1,000 4,131 2,000 5,617 4,043 8,820 4,331 4,327 4,258 978 3,559 2,000 1,000 1,000 3,829 2,000 5,000 4,628 2,234 2,310 4,118

みんなの回答

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.5

こんにちは。 たぶん、ご質問のデータ自体を解答してほしいというだけなら、すでに、解答は出ていますから、それはそれで良いと思いますが、回答者ご自身で、問題を解く方法を提示してあげられるかどうかだと思います。 部分集合和問題(Subset-sum problem) に関して、一通り他の回答者の方の回答を見させていただきました。特に、#4様の回答には目が行きましたが、お示しになっているリンク先は、Excelのものではありませんし、私には、その出ているスクリプトコードをVBAには移植できません。 一般的には、プログラミングコードでは、最低100万回程度の計算はしますから、VB系のアルゴリズムさえ分かれば可能だと思います。Google 検索(英語)で、Excel 範囲内で今回の質問に回答に結びつきそうなものは、ほとんど見受けられませんでしたね。 ただ、Excelの経験者なら誰でも思いつく、ソルバー(Solver)の利用です。試してみる価値はあるのではないでしょうか。 昨日、小一時間*試してみましたが、近似値(数10前後)までは出ますが、4万回の分岐まででは、#4様の正答にまでには達しえませんでした。4~5万回がソルバーの限界かもしれません。 *設定時間(デフォルト100秒)を越えたら、ダイアログで聞いてきますので、[継続]すると、後は、再び実行しますが、そのままですと終わりませんので、ESCでとめます。 **シナリオは、データ数が、32個を越えていますので保存できません。 ***ソルバーにはどうやらバグが存在するようで、数式の中に、IFなどのブーリアン型(TRUE/FALSE)があると、実行しないようです。また、動的範囲の条件を[バイナリ(0,1)]と設定しても、それ以外の数字も出てきてしまいますので、手動で直さなくてはなりません。 ソルバーの設定は、図で示しておきます。 他は、デフォルトのままでもよいはずです。

LS-120TK3
質問者

お礼

早速、解答ありがとうございました。しかも複数回いただきまして。 ありがとうございます。 また、お礼のお返事が遅くなってしまい申し訳ありませんでした。 今回の答えはいただいておりますので、また別の数値98個&もとめる総和数で実行しています。 今回初めてソルバーを使った、とういうレベルです・・・。

  • warumx
  • ベストアンサー率0% (0/9)
回答No.4

他の回答者が指摘されてますように、ナップサッック問題の1つで 部分集合和問題と言います。 例えば解説とコード例は参考URLのサイトにあります。 一般的な解法は知られていない難問です。 ExcelならばVBAを使うのが良いでしょうね。 基本的に反復計算なのでワークシートの数式で計算するのは 難しいと思いますが、循環参照を利用するとなんとかできる かもしれません。 参考までに、提示された数値例の最適解の例を載せておきます。 解1:重複したデータを許す場合    5000等のいくつかのデータは複数回現れている。 解2:すべて最大でも1回しか使用しない場合 どちらの解も和は220103です。     解1  解2 10000  1   1 8820   1   1 6201   1   1 6143   1   1 6016   1   1 5953   1   1 5642   1   1 5617   1   1 5228   1   1 5141   1   1 5105   1   1 5000   5   1 4916   1   1 4770   1   1 4707   1   1 4628   1   1 4627   1   1 4526   1   1 4417   1   1 4336   1   1 4331   1   1 4330   1   1 4327   1   1 4323   1   1 4274   1   1 4268   1   1 4258   1   1 4234   1   1 4220   1   1 4200   1   1 4198   1   1 4160   1   1 4131   1   1 4118   1   1 4109   1   1 4085   1   1 4043   1   1 4020   1   1 4000   1   1 3993   1   1 3946   0   1 3876   0   1 3837   0   1 3835   0   1 3829   0   1 3706   0   0 3705   0   0 3636   0   0 3559   0   0 3540   0   0 3518   0   0 3500   0   0 3472   0   0 3425   0   0 3358   0   0 3265   0   1 3260   0   0 3203   0   0 3200   0   0 3000   0   0 2947   0   0 2944   0   0 2866   0   0 2843   0   0 2834   0   0 2706   0   0 2563   0   0 2421   0   0 2310   0   0 2284   0   0 2278   0   0 2268   0   0 2234   0   0 2100   0   1 2091   1   0 2000   0   0 1955   0   0 1643   0   0 1597   1   0 1483   0   0 1130   0   0 1000   1   0 978   0   0 680   0   0 501   0   0 500   0   0 300   0   0

参考URL:
http://www.geocities.com/siliconvalley/garage/3323/aat/a_dyna.html
LS-120TK3
質問者

お礼

早速の解答ありがとうございました。 また、お礼のお返事が遅くなってしまい申し訳ありませんでした。 こちらの希望は 解1:重複したデータを許す場合    5000等のいくつかのデータは複数回現れているデータは    その回数分は使える。 でした。 参考URLは私にはどのように使えばよいのかわかりませんでした。 解1の答えを今回はつかわさせていただきました。

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

これは原データがエクセルにあること(他にエクセルにはエクセル関数があること、VBAもあることを考えたかどうか)からエクセルのカテに質問したかもしれないが、(時どきこのコーナーには不適のこういう質問がでるが)、数理の(数学の)詳しい方が良く見る、カテゴリに質問出すべきでしょう。 エクセルのシートを使えば、即エクセルの問題じゃない。 ーー 普通の組み合わせを考え、プログラムでしらみつぶしに実行する方法では行き詰まるので、特別のアイデアが(もしあれば)必要です。 世の中には、取りえる場合の数が膨大で正攻法では行き詰まる問題が 在ります。将棋など対戦ゲームなども層です。この質問はナップサック問題、動的計画法などの問題意識が近い。 Googleで「ナップサック問題」「巡回セールスマンの問題」「組合せ最適化問題」で照会してみたら。

LS-120TK3
質問者

お礼

早速の回答ありがとうございました。 また、お礼のお返事が遅くなってしまい申し訳ありませんでした。 エクセルで数値を入力、管理していましたのでこちらのカテゴリーに質問 してしまいました。 imogasiさんご提案どおりGoogleで検索してみたところ、なかなか厄介な質問であることに気がつきました。 もう少し検索して調べてみてから質問するようにいたします。 ただ、今回はもう少し質問してみたいところがありますので、こちらの場所をお借りします。

  • _Kyle
  • ベストアンサー率78% (109/139)
回答No.2

>その数字は一回しか使えません とありますが、質問文の数字には、例えば5,000が5個あります。 この場合、5,000は5回までなら使ってよいということでしょうか? VBAが選択肢に入るなら、やってやれないこともありませんが、 いずれにせよ、【数式では無理】ですし、VBAでやるにしても、 すべての組合せを書き出すとなると結構な時間がかかります。 「元データに複数ある数字でも、同じ数字は複数回使わない」 という条件で考えても、220,103キッカリになる組合せは 少なくとも数万通り以上あるようです。 ちなみに「同じ数字の重複を許さない」場合、 220,103キッカリになる組合せのうち、 使用する数字の個数の最小値は47個で、6,437通りあります。 例えば、  3540,3559,3636,3706,3829,3835,3837,3876,3946,3993,4000,4020,  4043,4085,4109,4118,4131,4198,4200,4220,4234,4258,4268,4274,  4323,4327,4330,4331,4336,4417,4526,4627,4628,4707,4770,5000,  5105,5141,5228,5617,5642,5953,6016,6143,6201,8820,10000 など。 また、同様の条件で、使用する数字の個数の最大値は70個、 このケースだけで少なくとも1万6千通り以上あります。 (1万6千というのはExcel2007の列数の制約です) 例えば、  300,500,501,680,978,1000,1130,1597,1643,1890,1955,2000,  2091,2100,2234,2268,2278,2284,2310,2421,2563,2706,2834,  2843,2866,2944,2947,3000,3200,3203,3260,3265,3358,3425,  3472,3500,3518,3540,3559,3636,3705,3706,3829,3835,3837,  3876,3946,3993,4000,4020,4043,4085,4109,4118,4131,4160,  4198,4200,4220,4234,4258,4268,4274,4323,4327,4331,4417,  4526,4628,4707 など。 以上ご参考まで。

  • neKo_deux
  • ベストアンサー率44% (5541/12319)
回答No.1

> できるだけ近くする数式はありますか? 一般的には解析的には解けない問題です。 「ナップザック問題」のキーワードで情報収集すると良いかも。 線形計画法とか、遺伝的アルゴリズムとかで、最適解を探索します。 質問の問題については、何らかの最適解が存在するのかも知れませんが。 -- A Genetic Knapsack Problem Solver http://www.geocities.com/SoHo/Exhibit/8033/applets/knapsack/gks.html のサイトでGAを使用、1000世代くらい見てみると、 1890 0 2000 3000 3203 0 0 2834 5228 4336 0 0 0 5000 0 0 0 4000 0 1643 0 2947 500 3835 1955 0 2866 2843 0 0 0 0 300 6143 3876 2000 0 0 4220 0 0 3837 0 2000 2284 2563 4274 2000 0 5105 1000 4200 0 2000 2091 0 0 3265 4160 3636 0 0 0 0 3500 1000 0 5141 0 0 3000 0 4707 4330 0 3946 3993 680 0 4268 6201 5000 3200 0 4916 3472 0 5000 0 0 2278 4234 0 4198 0 0 0 4131 2000 0 4043 0 4331 4327 4258 978 0 0 1000 0 3829 0 0 4628 0 2310 4118 計220051とか。 0は該当する数字を使用しない事を表す模様。

LS-120TK3
質問者

お礼

早速の解答ありがとうございました。 また、お礼のお返事が遅くなってしまい申し訳ありませんでした。 答えが出るのに時間がかかりますが、数値を入れるだけで簡単に回答、近似値が得られるのはとてもうれしいです。 ありがとうございました。

関連するQ&A

  • 3つの数字からなる数式について

    教えてください。 三角関数以外の数式で3つの数字を使った数式といえば何があるでしょうか? というのも3つの数字を使ってある方程式を考えています。

  • エクセルで数式を残して、数字だけ消したい

    エクセルで、数字を消してしまうと、そこにあった数式まで消えてしまいますよね? 数字だけを消して、数式を残す方法をおしえてください。 宜しくお願いします。

  • 1~9までの数字を一回ずつ使って・・・。

    質問します。 ○○○○×○=○○○○ (4桁×1桁=4桁) ○の中に入る数字はすべて異なり、1~9までの数字を一回ずつ使用します。 この数式を満たす数字の組み合わせは何通りかあるそうです。ちなみに、1963×4=7852という組み合わせは気合いで探しました。 この問題の解き方および解答がわかる方教えてください。

  • 3回別々にする、数式コピーを 1回で済ましたい。

    3回別々にする、数式コピーを 1回で済ましたい。  お世話になります。 マイクロソフト エクセル2010で、  平均して 126列の列。行が平均30行の、表を作成しています。  単純な、算数の式を <数式コピー>を応用してで使いたいのですが、 例えば、A4/A5を数式コピーの絶対参照にして、 (小数点以下2桁の正の数字を打ち込まれた)行の 126列全部を書き直したい。 数値に、第5行目に、(1) 0や、(2)Tr;Trace超微量と (3)-;測定していない or 測定不可の列が 散在して混じっています。-は 負ではありません。 (他の 行・列の数値も、似通ったものです。)そんな別々の表が 幾つもあり、 A4/A5の値は、表によって異なります。例えば100/126等です。 その際、F4で/F5を 絶対参照にしたり、 (2)を IF(AB5="Tr","Tr",F4/F5) にし、 (3)をIF(AB5="-","-",F4/F5)と、3回、1行に計算し直し1行が完成します。  それを、1つのまとまった式にする事は可能と思いますが、どうしたら良いかご教示を。 2012/4/25

  • エクセルで数式を入れても値が空欄になります

    タイトルの通りなのですが、 エクセルに数式を入れてもセルが空欄になって値が表示されません。 全く同じ数式を他のセルに入れると値が表示されるので 数式が間違っていることはないと思われます。 また、空欄になって値が表示されないセルにマウスをあてると 数式自体は入ってます。 時々、このような事象が起きるのですが どうやって改善すれば良いでしょうか?

  • 数字の性格について 博士の愛した数式

    数字の性格について 博士の愛した数式 「博士の愛した数式」の中で、1~9までの数字の性格について書かれた部分があったと思うのですが、見付けられません。 6はみんなと仲の良い数字だとか、7は独りぼっちだとか、そんな感じのことが書いてあった記憶があるのですが… 分かる方がいましたら詳しく教えてくださいm(__)m

  • エクセルで数式をのけて数字だけを残す

    エクセルで作った表で 一括で 数式だけをはずし そのセルにある 数字 だけは残す方法ありますか? 計算式を見られたくないときなど・・・ 教えてください。

  • 数式をコピーしても対象の値が変わりません。

    数式をコピーしても対象の値が変わりません。たとえばC1に「=A1+B1」と数式を作って、数式をC8にコピーすると「=A8+B8」になります。 なぜでしょうか?教えてください。

  • エクセルで数式の値をただの数字に

    エクセル2007を使っているのですが 表データからオートSUMなどで 出した値を=SUM(A1:A2)の結果としてではなく ただの数字としてコピーなどがしたいです どなたか詳しい方よろしくお願いします。

  • ○○番台に特定の値を返す数式

    エクセルの質問です。 ○○番台の数字の隣のセルに自動で特定の値が返される数式を知りたいです。 A列にコード、B列に地域名を入れる表を作りたいのです。 別のシートや別の欄にコード対応表を作る必要があるとは思うのですが、その表の作り方?表し方?もよくわからないのです…。 よろしくお願いします。

専門家に質問してみよう