在另一篇文章中,MSN给了我一个解决我的代数问题的好指南(Calculating bid price from total cost)。现在,即使我可以手动计算它,我完全坚持如何用伪代码或代码编写它。有人能给我一个快速提示吗?顺便说一句,我想根据最终费用计算出价。
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
答案 0 :(得分:3)
该功能简化为:
/ 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
如果您将每件作品视为一项单独的功能,则可将其翻转:
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
如果您将费用汇入每项功能,您将获得该范围的估算出价值。您必须检查该值是否确实在该函数有效范围内。
示例:
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!
由于原始函数严格增加,因此这些函数中的至多一个将给出可接受的值。但对于某些投入,它们都不会给出很好的价值。这是因为原始函数跳过这些值。
final cost(1000) = 1.02 * 1000 + 160 = 1180
final cost(1001) = 1.02 * 1001 + 165 = 1186
因此,例如,没有函数会为cost = 1182
提供可接受的值。
答案 1 :(得分:2)
由于使用PIN
和ceiling
,我看不到一种简单的方法来反转计算。假设bid
具有固定的精度(我猜在点后面有两位小数),你总是可以使用二进制搜索(因为函数是单调的)。
编辑:在考虑了更多之后,我观察到,采用x = bid*1.02 + 100
,我们得出最终成本在x + 15(不包括)和x + 70(包括)之间(即{{1} })。鉴于此范围的大小(x+15 < final cost < x+70
)以及70-15=55
的特殊值(请参阅下面的注释)与此相差很远,您可以使用bid
和{{1获取正确的使用情况/使用价值和增加的成本,并简单地解决该等式(其中不再包含x+15 = final cost
或x+70 = final cost
)。
为了说明,最后的费用为PIN
。从ceiling
222
开始x+15 = 222
。然后我们知道使用费用由bid = 107/1.02 = 104.90
给出,额外费用为bid*0.1
。换句话说,我们得到5
,因此final cost = bid*0.1 + bid*0.02 + 5 + 100 + bid = bid*1.12 + 105
。由于bid = (222-105)/1.12 = 104.46
的值意味着正确的使用价值和额外成本,我们知道这是解决方案。
但是,如果我们首先查看bid
,我们会得到以下结果。首先,我们得到x+70 = 222
的假设。这意味着使用费用为bid = 52/1.02 = 50.98
,额外费用为10
。因此,我们得到5
,因此final costs = 10 + bid*0.02 + 5 + 100 + bid = bid*1.02 + 115
。但如果bid = (222-115)/1.02 = 104.90
为bid
,则使用费用不是104.90
而是10
,因此这不是正确的解决方案。
我希望我能够清楚地解释清楚。如果没有,请告诉我。
N.B。:特殊值我指的是定义使用价值和增加成本的函数的变化。例如,对于使用费用,这些值为bid*0.1
和100
:500
下方使用100
,10
上方500
使用50
您之间使用bid*0.1
。