bir cebir denklemi Programlama

oy
2

başka bir yazı, MSN benim cebir problemi (çözümüyle ilgili bana iyi bir rehber verdi toplam maliyetinden teklif fiyatı hesaplanıyor ). Şimdi, elle hesaplayabilirsiniz olsa, ben pseudocode veya kodunda bu yazma konusunda tamamen sıkıştım. Herkes bana hızlı bir ipucu verebilir? Bu arada, son maliyetler verilen teklifi hesaplamak istiyorum.

usage cost(bid) = PIN(bid*0.10, 10, 50)
seller cost(bid) = bid*.02
added cost(bid) = PIN(ceiling(bid/500)*5, 5, 10) + PIN(ceiling((bid - 1000)/2000)*5, 0, 10)
storing cost(bid) = 100
So the final cost is something like:

final cost(bid) = PIN(bid*.1, 10, 50) + pin(ceiling(bid/500)*5, 5, 20) + PIN(ceiling((bid - 1000)/2000)*10, 0, 20) + bid*.02 + 100 + bid
Solve for a particular value and you're done.

For example, if you want the total cost to be $2000:

2000 = PIN(bid*.1, 10, 50) + pin(ceiling(bid/500)*5, 5, 10) + PIN(ceiling((bid - 1000)/2000)*5, 0, 10) + bid*.02 + 100 + bid.
Bid must be at least > 1500 and < 2000, which works out nicely since we can make those PIN sections constant:

2000 = 50 + 10 + 5 + 100 + bid*1.02
1835 = bid*1.02
bid = 1799.0196078431372549019607843137
Oluştur 13/03/2009 saat 02:08
kaynak kullanıcı
Diğer dillerde...                            


2 cevaplar

oy
2

Nedeniyle kullanımı PINve ceilingben hesaplama ters çevirmek için kolay bir yol göremiyorum. Varsayarsak bidsabit hassas (I nokta arkasında iki ondalık sayılar tahmin ediyorum) (fonksiyonları monoton olarak) her zaman bir ikili arama kullanabilirsiniz etmiştir.

Düzenleme: Biraz daha düşünmeye sonra alarak görülmektedir x = bid*1.02 + 100biz nihai maliyetler (hariç) x + 15 ve (dahil) x + 70 (yani arasında olduğunu var x+15 < final cost < x+70). Bu aralığın (büyüklüğü göz önüne alındığında 70-15=55için) ve özel değerler (aşağıdaki nota bakınız) gerçeği bidbundan bütün ayrı fazla, sen alabilir x+15 = final costve x+70 = final cost(, kullanım hakkı vakalar / değerleri ve eklenen maliyetler almak ve sadece o denklemi çözmek artık, ya sahip olan PINya da ceiling) içinde.

Göstermek için, nihai maliyet olalım 222. Gönderen x+15 = 222öyle izler bid = 107/1.02 = 104.90. Sonra kullanım maliyetleri ile verilmiştir buna sahip bid*0.1ve ek maliyetler olduğunu 5. Bir başka deyişle, elde ederiz final cost = bid*0.1 + bid*0.02 + 5 + 100 + bid = bid*1.12 + 105ve bu nedenle bid = (222-105)/1.12 = 104.46. Bu değer olarak bidkullanımı ve ek masraflar için doğru değerler alınmıştır yollarla, bu çözüm olduğunu biliyoruz.

Biz ilk bakmış olsaydı Ancak x+70 = 222, aşağıdakileri tanınacak. Öncelikle bu varsayım bunun için olsun bid = 52/1.02 = 50.98. Bu kullanım maliyetleri anlamına gelir 10ve ek maliyetlerdir 5. Bu yüzden elde final costs = 10 + bid*0.02 + 5 + 100 + bid = bid*1.02 + 115nedenle ve bid = (222-115)/1.02 = 104.90. Ama eğer bidbir 104.90kullanım maliyet değildir o zaman 10ama bid*0.1, bu nedenle bu doğru çözüm değil.

Ben açıkça yeterince izah umuyoruz. Eğer değilse, lütfen beni bilgilendir.

Not: özel değerler ile ben fonksiyon kullanım değerlerini tanımlayan kendisi için bu anlama ve katma maliyetler değişir. Örneğin, kullanım maliyeti bu değerlerdir 100ve 500: Aşağıdaki 100kullandığınız 10yukarıdaki, 500kullandığınız 50ve aradaki kullandığınız bid*0.1.

Cevap 13/03/2009 saat 02:47
kaynak kullanıcı

oy
3

fonksiyon için kolaylaştırır:

                  / 1.02 * bid + 115   bid <   100
                  | 1.12 * bid + 105   bid <=  500
final cost(bid) = | 1.02 * bid + 160   bid <= 1000
                  | 1.02 * bid + 165   bid <= 3000
                  \ 1.02 * bid + 170   otherwise

Eğer ayrı fonksiyonu olarak her parçanın düşünün, bunlar ters edilebilir:

bid_a(cost) = (cost - 115) / 1.02
bid_b(cost) = (cost - 105) / 1.12
bid_c(cost) = (cost - 160) / 1.02
bid_d(cost) = (cost - 165) / 1.02
bid_e(cost) = (cost - 170) / 1.02

Her işlevin içine maliyeti fiş Eğer bu aralık için tahmini teklif değerine olsun. Bunu geçerli bir aralık fonksiyonları içinde bu değer gerçekten olup olmadığını kontrol edilmelidir.

Örnek:

cost = 2000

bid_a(2000) = (2000 - 115) / 1.02 = 1848  Too big! Need to be < 100
bid_b(2000) = (2000 - 105) / 1.12 = 1692  Too big! Need to be <= 500
bid_c(2000) = (2000 - 160) / 1.02 = 1804  Too big! Need to be <= 1000
bid_d(2000) = (2000 - 165) / 1.02 = 1799  Good. It is <= 3000
bid_e(2000) = (2000 - 170) / 1.02 = 1794  Too small! Need to be > 3000

Just to check:

final cost(1799) = 1.02 * 1799 + 165 = 2000   Good!

Orijinal işlevi kesin artan olduğu için, bu fonksiyonların en çok bir kabul edilebilir bir değeri ortaya çıkacaktır. Ancak bazı girişler için bunların hiçbiri iyi değeri verecektir. Orijinal işlevi bu değerler üzerinde atlar olmasıdır.

final cost(1000) = 1.02 * 1000 + 160 = 1180
final cost(1001) = 1.02 * 1001 + 165 = 1186

Bu nedenle herhangi bir işlev için kabul edilebilir bir değer verecek cost = 1182örneğin.

Cevap 13/03/2009 saat 03:32
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more