把两个数字拆分,这个程序要怎么做???

ecz00 2015-06-01 09:52:57
设数量为 437330
金额为 1167671

要求把数量和金额随机拆分为 3-10组,符合以下要求的数据
1、数量保留到10位
2、单价保留到小数点后2位
3、保留后的 数量*单价=四舍五入(金额,0) '这里用四舍五入表示round函数,因为round函数只奇数0.5才进位,已经用自定义函数代替
4、拆几组随机,只要这几组数量合计为被拆分前的原数,金额合计也是。
5、 【单价有范围,拆分出来的“最大单价-最小单价差为0.3内”】

举个2组的例:
数量 41790 金额93816

拆分
数量34910 单价2.24 金额 78198 'round(34910*2.24,0)=78198
数量6880 单价2.27 金额15618 '同上

先谢过各位高手了!
...全文
196 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
ecz00 2015-06-03
  • 打赏
  • 举报
回复
@ Tiger_Zhao 收到
Tiger_Zhao 2015-06-02
  • 打赏
  • 举报
回复
2分的方程:
数量以十为单位 n1+n2=4179
金额以分为单位 p1*n1*10+p2*n1*10=9381600
限制 abs(p1-p2) <= 30
4元方程求整数解

3分就是6元方程,4分就是8元方程,……10分就是20元方程。
你可以去搜搜看,有没有方程解法。
ecz00 2015-06-01
  • 打赏
  • 举报
回复
各位大虾,真的只能像楼上所说的酱紫吗?没有公式神马的可以用?
ecz00 2015-06-01
  • 打赏
  • 举报
回复
引用 3 楼 Tiger_Zhao 的回复:
根本没法随机的。 单看二分: 平均单价 = 93816/41790 = 2.24 金额差 = 93816-(41790*2.24) = 206.4 只能在 0.01 到 0.30 之间看那个数量可以是整十的,然后在这几种里选一种了。
206.40/0.01 = 20640
206.40/0.02 = 10320
206.40/0.03 = 6880
206.40/0.04 = 5160
206.40/0.06 = 3440
206.40/0.08 = 2580
206.40/0.12 = 1720
206.40/0.16 = 1290
206.40/0.24 = 860
正解,然后在这个序列里拼凑出同时符合数量和金额的,前面几个可以直接round(rnd*rnd)取,最后一个则要刚好在序列中。。。
Tiger_Zhao 2015-06-01
  • 打赏
  • 举报
回复
根本没法随机的。

单看二分:
平均单价 = 93816/41790 = 2.24
金额差 = 93816-(41790*2.24) = 206.4
只能在 0.01 到 0.30 之间看那个数量可以是整十的,然后在这几种里选一种了。
206.40/0.01 = 20640
206.40/0.02 = 10320
206.40/0.03 = 6880
206.40/0.04 = 5160
206.40/0.06 = 3440
206.40/0.08 = 2580
206.40/0.12 = 1720
206.40/0.16 = 1290
206.40/0.24 = 860
ecz00 2015-06-01
  • 打赏
  • 举报
回复
引用 1 楼 Topc008 的回复:
这不就是玩 Rnd 函数嘛........
如果就是玩Rnd,我就不来这发贴了,这个问题估计论坛里也没人解的了 我估计没有数学高手,是出不了高效程序的,很容易就陷入无限循环或穷举 关键不是拆出前几个数,而是最后一个数,你试一下就知道这个概率有多低了
一如既往哈 2015-06-01
  • 打赏
  • 举报
回复
这不就是玩 Rnd 函数嘛........

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧