• 締切済み

未知数が4つの方程式の整数解の求め方。

例えば100円のりんご、70円のばなな、230円のぶどう、180円のももを買うとします。 合計額は分かっています。1030円です。しかし、それぞれいくつ買ったかはわかりません。 それぞれいくつ買ったかをエクセルを用いて解きたいのですが、どういう式や関数を使えばいいでしょうか。 整数解なので、答えが出ることが多いと思います。 今回はそれぞれの果物が少ない額で公倍数を持っていますが、基本的にそれぞれ公倍数を持っていないと仮定してください。 整数にならなくても近似値でもいいので、解けませんでしょうか。 何か抜けてることがあれば聞いてください。よろしくお願いします。 ちなみに答えは、りんご3個、ばなな2個、ぶどう1個、もも2個です。

みんなの回答

回答No.7

#2です。書き込みミスを発見、いつもの事か。。。。。w (誤) 例えば、w=2の時、10x+7y=39 7y=44-10x≧7 → x=1、2、3 この中で10x+7y=39 を満たすのは x=3、y=2のみ。つまり (x、y、z、w)=(3、2、1、2)。 (正) 例えば、w=2の時、10x+7y=44 7y=44-10x≧7 → x=1、2、3 この中で10x+7y=44 を満たすのは x=3、y=2のみ。つまり (x、y、z、w)=(3、2、1、2)。

  • hrsmmhr
  • ベストアンサー率36% (173/477)
回答No.6

何度もすみません のこり210円なら70*3でいいのでした つまりブドウ3個バナナ7個も解です ブドウ3個で30*8になるので-30*7するか30*3足せばいいのですが 前者かバナナで7個の場合 後者はブドウだと50余りますし、ももだと1030オーバーです

  • hrsmmhr
  • ベストアンサー率36% (173/477)
回答No.5

#4です 解の(2,0,1)は(1,0,1)でした

  • hrsmmhr
  • ベストアンサー率36% (173/477)
回答No.4

70=100-30,180=100+50+30,230=100*2+30 十個以上買っても1000円をオーバーしないのはバナナだけなので(リンゴの場合30円が処理できない) リンゴw個、バナナx個、ブドウy個、ももz個としたら x>=10で -(x-10)+y+z=1,2w+2(x-10)+3y+4z=6 と x<10で -x+y+z=1,2w+2x+3y+4z=20 しかない 結局 2w+5y+6z=8もしくは 2w+5y+6z=22をみたす0以上の整数の組み合わせを求めればよく yの係数が奇数であることに注意して (w,y,z)=(4,0,0),(2,0,1),(2,4,0),(0,2,2),(3,2,1),(2,0,3),(5,0,2),(8,0,1) 一応50*3が30の倍数であるため確認が必要 ブドウ三個をバナナでキャンセルするには少なくとも四個必要だが そこまでで合計820円となりのこり210円はどうやっても組み合わせれない

  • ur2c
  • ベストアンサー率63% (264/416)
回答No.3

Exccel で,という仕様は満たさないのですけど。 解はたくさんあるので,全部を求めるなら Haskell という(無料の)言語の list comprehension という機能を使うと簡単です. > let u = 1030 `div` 70 > let v = [0..u] > [(a,b,c,d)|a<-v,b<-v,c<-v,d<-v, 100*a+70*b+230*c+180*d==1030] [(0,3,2,2),(0,7,0,3),(1,3,0,4),(1,10,1,0),(2,2,3,0),(2,6,1,1),(3,2,1,2),(4,9,0,0),(5,1,2,0),(5,5,0,1),(6,1,0,2),(8,0,1,0)]

参考URL:
http://tryhaskell.org/
rasenk
質問者

お礼

これすごいですね笑 パソコンの使えるソフトがエクセルくらいだったので、エクセルで考えてたのですが、個人的興味でちょっと調べてみます。ありがとうございます。

回答No.2

公倍数を持とうが、持たないが そんなことは無関係。敢えて、エクセルの必要もない。 場合わけの手間がかかるだけで、こんな簡単な高校1年生の問題。。。。。w x≧1、y≧1、z≧1、w≧1 とする。(0の場合を 考えるなら以下の内容は“少しだけ”変わるが、大差はない) 10x+7y+23z+18w=103 だから 10x+7y+18w=103-23z≧10+7+18=35 だから、z=1、2. (1) z=1の時、10x+7y+18w=80 → 10x+7y=80-18w≧17  w=1、2、3 従って、w=1、2、3の時、場合わけをすればよい。 例えば、w=2の時、10x+7y=39 7y=44-10x≧7 → x=1、2、3 この中で10x+7y=39 を満たすのは x=3、y=2のみ。つまり (x、y、z、w)=(3、2、1、2)。 w=1と3 の時も同様に考えると良い。 (2) z=2の時も同じ。続きは自分でできるだろう。

rasenk
質問者

お礼

回答が大数みたいでちょっと懐かしい感じがしました。。手計算をしないで、求められるかってことをしたかったので、この場合分けをif関数使っていけばできそうな気もします。やってみます。ありがとうございます。

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

計算式なんかでは解けず、線形計画法なんかの数値計算、アルゴリズムを使います。 Excelの場合だと、ソルバーの機能で実装されています。 @IT:Windows TIPS -- Tips:ソルバー機能による人員配分シミュレーション http://www.atmarkit.co.jp/fwin2k/win2ktips/399solver/solver.html 表を作成して、合計金額を目標値の1030円、それぞれの個数を変化させるセル、整数の条件と1個以上の条件を指定とか。

rasenk
質問者

お礼

ソルバーは考えたんですけど、使用しているパソコンにインストールできない理由がありまして、今回のような質問をしました。。おっしゃる通りだと思います。ありがとうございます。