注册 登录
编程论坛 VB6论坛

关于生成奖项数据生成的问题

沉默的痞子 发布于 2019-04-15 09:57, 1543 次点击
需要生成一个奖项数据,要求如下:
1.  1-11 等奖,数量从小到大,分别 1,3,9,50,50,75,375,425,700,2100,3400;剩下的是没有奖的数量17812.总数是25000
2.  要求没奖的或有奖的连续不得超过6个

问:请问这个奖项数据要如何计算才能满足以上要求,且数据大致上平均?

5 回复
#2
ZHRXJR2019-04-15 20:17
总数是25000,没有奖的数量17812,那么有奖的是7188,这些是如何分配的?即1-11等奖,各是多少有奖的?
例如11是1、10是5、9是20等等,....................说清楚。
“要求没奖的或有奖的连续不得超过6个” 是什么意思,不明白。
#3
沉默的痞子2019-04-18 13:15
回复 2楼 ZHRXJR
比如0代表无奖,1-11分别代表1-11等奖,那么:
0
1
0
0
2
0
0
3
2
……
连续出现的0 或 连续有奖的不能超6个,也就是说连续5个0之后必须是1-11,  连续5个1-11之后必须是0

[此贴子已经被作者于2019-4-18 13:17编辑过]

#4
风吹过b2019-04-18 16:41
关于是后面这连续的的处理。

我尝试随机把这个奖项填进去,结果有 700+ 的地方连续6个0或以上的,最多一个地方有 21个0,
没时间去弄后面了调整了。
#5
风吹过b2019-04-18 17:21
想到一个方法,
先把位置序列化。
形成一个如  12341254251312... 这种间隔的序列,共7188个,1表示下一个与这个相差1,5表示相差5,类推
先产生相差1的间隔,好控制,连续6个1,第6个不得为1。
然后根据这个序列,生成位置坐标,也对应的是 7188 个。
再把奖项范围列出1,4,13,63,113,188,563,988,1688,3788,7188
如产生随机数,如得到一个 999 ,那么大 988,小于1688,就算 9 等奖。
依次写入前面生成的 7188个位置坐标序列中。
然后就得到最终结果。
这程序调试需要很久时间。我老是计算失败。


z = 25000

s = "1,3,9,50,50,75,375,425,700,2100,3400"

f = Split(s, ",")

z1 = 0
For i = 0 To 10
    c(i + 1) = Val(f(i))
    z1 = z1 + c(i + 1)
Next i

z2 = z - z1

a(5) = Int(Rnd() * Int(z / 5))
i = z - a(5) * 5

a(4) = Int(Rnd() * Int(i / 4))
i = i - a(4) * 4

a(3) = Int(Rnd() * Int(i / 3))
i = i - a(3) * 3

a(2) = Int(Rnd() * Int(i / 2))
i = i - a(2) * 2
a(1) = i

这步是算对了,但后面的就出现错误,还没想到问题出在哪。
没时间了。

#6
沉默的痞子2019-04-19 13:44
感谢各位,已经完成了
1