プロが教える店舗&オフィスのセキュリティ対策術

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

ちなみに答えは、りんご3個、ばなな2個、ぶどう1個、もも2個です。

A 回答 (7件)

計算式なんかでは解けず、線形計画法なんかの数値計算、アルゴリズムを使います。



Excelの場合だと、ソルバーの機能で実装されています。

@IT:Windows TIPS -- Tips:ソルバー機能による人員配分シミュレーション
http://www.atmarkit.co.jp/fwin2k/win2ktips/399so …

表を作成して、合計金額を目標値の1030円、それぞれの個数を変化させるセル、整数の条件と1個以上の条件を指定とか。
    • good
    • 0
この回答へのお礼

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

お礼日時:2011/12/26 23:32

公倍数を持とうが、持たないが そんなことは無関係。

敢えて、エクセルの必要もない。
場合わけの手間がかかるだけで、こんな簡単な高校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の時も同じ。続きは自分でできるだろう。
    • good
    • 0
この回答へのお礼

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

お礼日時:2011/12/26 23:39

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/
    • good
    • 0
この回答へのお礼

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

お礼日時:2011/12/26 23:42

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円はどうやっても組み合わせれない
    • good
    • 0

#4です


解の(2,0,1)は(1,0,1)でした
    • good
    • 0

何度もすみません


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

#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)。
    • good
    • 0

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