比如要开20W元发票,但目前只有千元发票,现要求开的900以上的发票张数占60%,800-899发票张数占20%,700-799发票张数占10%,600-699发票张数占5%,500-599发票张数占2%,400-499发票张数占1%,300-399发票张数占1%,200-299发票张数占1%。要生成这类发票,算法如何写?发票面额如900以上 800-899等都是随机生成,在范围之内,不能用固定的800或900等。
解决方案 »
- OPC SyncRead
- 关于ADO?
- 有谁想要 实现 [中国互动游戏中心 和浩方对战平台]的代码?
- 怎么样把DELPHI程序打包成安装文件?
- 请问高手:怎样在Richedit中实现像word那样的插入表格的功能?richedit能显示word中的表格,不知能不能做表格呢?
- 求救,怎么在QRreport里面显示总的页码数目?
- adoquery的问题
- 如何运行内存文件?各位大虾,请多多指教。
- 可能很菜的问题,送分的问题!!
- 关于中文名的可执行程序显示在任务栏上出现乱码问题!
- 想覆盖原来的文件除了用rewrite外,用FileCreate可以吗
- 200分求 如何在1个目录中搜索多个文件!还有100分在Delphi VCL组件开发及应用中,在线等
2、从小值到大值取随机数200-299一X,300-399一X,400-499一X, 500-599两X
600-699五个,700-799十X,800-899二十X
3、Y = 算出剩余钱数/60X,M = 900 + 2*(Y-900)
4、900到M取30个随机数,小于Y的就再取一个对应大于Y的值
(如Y=1000,M=1100)其中一随机数999小于Y,则再去对称值1001,这样30X对刚好
发票数也是由系统自动确定的,不能手工输入的
是说我吗?
确实 这个百分比是可以有一点误差的 但也是有一定条件才可以的,如果发票总共只开3000还是5000的 是不可能有这个百分比例的
以每类发票的最大额-50元或40元为上限,根据百分比计算每类发票的张数,余额随机分配到每类发票中
OKOKOKOKOKOKOK !!
ok,下面是算法:
前提:能够完成生成某一段的随机数(例如,900-990,800-899等)而且这些数都是整数。
思想:按照现有发票张数的比例动态分配下一张发票应该在的区间。分配的方法是按照发票的权重来分配发票的优先权。
流程如下:循环判断:总额不超过规定总额。循环体:用一个数组记录每一个段的发票的数量,另一个字段记录每一张发票的面额,首先由第一个数组判断最高权重的发票段(900-990段)的张数在总发票数里占的比例是否达到了规定比例,达到了就计算下一个段的发票组的比例。如果当前段的发票张数没有达到规定的比例,那么就分配下一张发票在此发票段,随机生成一张发票,记录进发票的数组,然后当前段的发票数+1,结束当前循环。如果到最后一个段都达到规定的比例(这个情况每100次循环发生一次)那么下一张发票就分配在权重最重的发票段。如此平衡又被打破,循环继续。直到总额超过规定总额。
结束循环的处理:最后一张发票取消,剩下的缺口金额是在1-990之间,这个就判断处理一下就ok了,200-990的话就直接分配最后一张了,如果是1-199的话,就把600-699的最后一张发票取出来加上这个差额就行了。
这样分配少于1000张发票可能产生的张数上的误差都会比较大,但是1000张以上应该问题就不大了,毕竟张数与规定比例的张数最多就差2张,就算最少的1%的200-299段的发票,这种情况下也有10张以上,这么2张的误差应该可以接受了。如果有具体要求再商量。
不才只能想到这么多了。有问题达人给斧正。
我现在的想法和这个有点出入 我的想法是 如果总额够开100张以上 就100张100张的开 不足100张是 用你的这个方法
只要总金额大于91260 就可开100张呀