Foxtable(狐表)用户栏目专家坐堂 → 求助一段计算代码~


  共有1721人关注过本帖树形打印复制链接

主题:求助一段计算代码~

帅哥哟,离线,有人找我吗?
huangxueyao
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:443 积分:3530 威望:0 精华:0 注册:2013/2/9 12:45:00
求助一段计算代码~  发帖心情 Post By:2017/4/17 7:45:00 [只看该作者]

假如
drs = DataTables("订单明细").Select("[产品] = 'PD01',"数量 DESC")
查询到的订单中,数量按以下排列:
7
6
5
4
3
2
1
一个订单有7个产品,
我们打包时,有两个条件:
1、每个包裹的数量小于等于10;
2、同一个订单的所有包裹的产品数量应该尽可能平均。

我的思路是:
  1. 计算出产品总数M=27
  2. 计算出包裹总数N=27/10,向上取整为3
  3. 计算出每个包裹应该包装的产品平均数m=27/3=9
  4. 按照select的结果从大到小排序,从第一个(7)开始
    1. 如果≥m,此产品单独组合成一个包裹;
    2. 如果<m:
      1. 查询第二个记录,产品数量相加,如果总数>10,组合失败,继续往下查询;
      2. 当某两个产品的组合数量<m时,继续往下组合,直到满足≥m且≤10时,这个包裹才算成功。
这样的话,如果订单记录是:
7|6|5|4|3|2|1的话,其包裹组合是7+3|6+4|5+2+1
如果订单记录是:
7|7|7|2|2|1|1的话,其包裹组合是7+2|7+2|7+1+1
如果订单记录是:
4|4|3|3|2|2|1的话,其包裹组合是4+4+2|3+3+2+1

我的困难主要是:组合阶段的代码
这里涉及比较多的嵌套,而且已经成功组合过包裹的产品在下一次计算中又要排除掉。

求帮忙………………
万分感谢~

 回到顶部
帅哥哟,离线,有人找我吗?
huangxueyao
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:443 积分:3530 威望:0 精华:0 注册:2013/2/9 12:45:00
  发帖心情 Post By:2017/4/17 7:49:00 [只看该作者]

另外一个思路是,一大配多小

这样的话,如果订单记录是:
7|6|5|4|3|2|1的话,其包裹组合是7+1+2|6+3|5+4
如果订单记录是:
7|7|7|2|2|1|1的话,其包裹组合是7+1+1|7+2|7+2
如果订单记录是:
4|4|3|3|2|2|1的话,其包裹组合是4+1+2+2|4+3+3

[此贴子已经被作者于2017/4/17 7:49:18编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
有点色
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2017/4/17 8:52:00 [只看该作者]

排列组合的例子参考

 

下载信息  [文件大小:316.0 KB  下载次数:37]
图片点击可在新窗口打开查看点击浏览该文件:排列组合.table

 

你可以任意组合排列出符合10、10、10的组合,比如 7654321 组合就有 721 64 541 73 之类的,然后分析这些是否满足 7654321,满足就可以,如果不满足,就改成符合10、10、9的组合,依次类推。


 回到顶部