一个笔试题目,大家看看怎么实现
现有买方和卖方各n个
n个买方买的商品总数和n个卖方商品总数相等
卖方卖给买方商品要开一张发票,买方方便去取货
请用java实现买方和卖方的自动撮合处理
要求:
1.若买方A所买商品数量和卖方B所卖商品数量一样,则优先匹配
2.每个卖方所开的发票最少,每个买方都很简单的买到想要的商品
例如:
卖家: 数量 买家 数量
A 1000 a 800
B 500 b 500
C 300 c 200
D 200 d 500
则匹配结果是:
B → b
A → a + c
C+D → d
------解决方案--------------------你这卖家数量能拆开么?不能拆还好点。。能拆我就不会鸟。。
1、选一个卖家,然后找有没有正合适的买家,没有的话就看看有没有两者和正好相等的。
2、循环1
3、调换卖家、买家
不知行不行。。。
------解决方案--------------------
题目出得有问题。
1.若买方A所买商品数量和卖方B所卖商品数量一样,则优先匹配
按这个要求,匹配结果应该是B-b,D-c,但这样开的发票比给出的结果多一张,1和2是矛盾的。
我理解应该第二条优先,第一条尽量,而不是第一条优先匹配。
------解决方案--------------------拆的原则的是什么?是找最多的,还是最少的和。
分析:如果找最多的拆,那么,少的会越来越多。