应该算是个算法问题

2019-10-10 13:02:23 +08:00
 cambria

买东西买出个难题:

商品 A,价格 99 元,商品 B,价格 75 元,商家活动每单满 300-150 (可下任意单,自由组合 AB )。

问题:假设商品需求比例是 A:B = 1:4 (每买 1 个 1 就要买 4 个 B ),在只能购买 AB 两种商品且数量不限制的前提下,怎么下单购买单位成本最低?

(原以为是个简单问题,却被难住了)

1728 次点击
所在节点    问与答
25 条回复
cambria
2019-10-10 13:34:36 +08:00
目前的猜想是:1A3B 作为一单,多余的 B 每 4 个一单,那么 4A16B 就可以下 5 单( 1A3B * 4,4B * 1 ),综合成本是 211.5/组( 1A4B 为一组),但是不知道怎么抽象成数学问题,以及是否有穷举以外的证明方法。
chyou3
2019-10-10 13:42:37 +08:00
并不认为这是个算法问题,这应该是个关于你钱包厚度的问题
Rekkles
2019-10-10 13:45:04 +08:00
这个应该是求怎么搭配能达到用半价买商品的一个算法吧 二元二次方程?
maichael
2019-10-10 13:48:16 +08:00
能写成方程就能画图了吧,A 和 B 的数量是有关联的,所以应该可以画出 A 的数量和购买成本的关系图。
binux
2019-10-10 13:50:54 +08:00
当然是 A 买 100 个,B 买 400 个单位成本最低了啊
ayase252
2019-10-10 13:57:58 +08:00
显然,每一单的总价格是 300 的倍数的话单位成本是最低,找一个符合 99a + 75b=300n 的 a,b 作为每单的数量。
接下来,求下多少单能够满足 4n_a = n_b。
mainjzb
2019-10-10 13:58:09 +08:00
因为 4B = 300 满足唯一满减活动
显然此题在任何情况下,都能补充到最低价的 B
问题转为,如果以最低价购买到 A,且 B 能被量化为固定价格 37.5
满足套餐的优惠情况
4A 396-150 = 246
3A1B 375-150 =225
2A2B 348-150 =198
1A3B 324-150 =174
4B 300

B 能被量化为 37.5,可得每种情况下的 A 价格
1A3B A=61.5
2A2B A=61.5
3A1B A=62.5
4A A=61.5

事实证明。。无论你怎么凑单,价格都差不多。
cambria
2019-10-10 13:59:28 +08:00
@Rekkles 一般方程搞不定,感觉是个线性规划的问题,可惜我不擅长。
cambria
2019-10-10 14:01:52 +08:00
@ayase252 每一单的 AB 组合都可以不同,按照这个思路,得列出 AB 组合的所有可能才行
coderluan
2019-10-10 14:04:43 +08:00
这个问题本身有问题啊,单位成本不能作为合算不合适的依据的:

因为在满 300-150 的前提下,最低单位成本就是 50%了,只要总价能被 300 整除,那样就能得到最低单位成本,直接买 300 件 A,1200 件 B,就满足这个条件了,不需要算法也不需要数学。
cambria
2019-10-10 14:07:44 +08:00
@mainjzb 在不同的组合中 B 的量化价格是不固定的,4B 的时候是 37.5,3A1B 的时候,总价是 222,B 的量化成本应该是 75/372*222 约等于 44.76
cambria
2019-10-10 14:08:39 +08:00
@coderluan 300 件 A 1200 件 B 的情况下,如何下单呢?
mainjzb
2019-10-10 14:09:26 +08:00
1A3B *4 + 4B = 174*4 + 150 = 846

2A2B *2 + 4B *3 = 198*2 + 150*3 = 846

4A + 4B * 4 = 246+600=846

验算一下,显然正确
cambria
2019-10-10 14:10:25 +08:00
@coderluan 这个问题里不是每满 300-150,而是每单 300-150
cambria
2019-10-10 14:13:06 +08:00
@mainjzb 但你这个不能满足 A:B = 1:4 呀
cambria
2019-10-10 14:13:43 +08:00
@mainjzb 抱歉,是我看错了
mainjzb
2019-10-10 14:14:10 +08:00
1A3B *4 + 4B = 4A16B
2A2B *2 + 4B *3 = 4A16B
4A + 4B * 4 = 4A16B
难道我数学不好?
cambria
2019-10-10 14:15:52 +08:00
@mainjzb 你这个计算方法说明的是:当总量为 4A16B 的情况下,有多种下单方式可以让总成本为 846,我想问的是,总量变化的情况下,如何得出最低单位成本
Vegetable
2019-10-10 14:19:29 +08:00
因为是每满 300-150,所以不存在拆单购买比一次购买所有更优惠的情况,最优解无论是怎么组合的,一单买完一定是最优惠的方案之一。

而最优方案就是半价,总价是 300 的整数倍即可。因为 1:4 且 4b=300,所以无论买多少份,b 都要自己独享对应份数的 300。在这种情况下,只要保证 N 份 A 是半价就可以了。即 NA % 99 = 0 时,总花费必然是半价。

99 和 300 的最小公倍数是=9900,N=33.
所以当份数为 33N 的时候,单位成本最低。
Vegetable
2019-10-10 14:20:26 +08:00
NA % 300 = 0

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/607835

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX