回 帖 发 新 帖 刷新版面

主题:请教各位高手一个简单的逻辑问题

我准备改造一个抽奖的程序,遇到一些逻辑算法的问题想请教一下各位。

程序是这样的
TOTAL为该等级的获奖总人数
EVERYTIME为该等级每轮抽出的人数
SELECTOUT为已经抽出的人数

NEEDNUM为该轮需要抽出的人数

比如说总共有50个中奖名额,每次抽出25个,已经抽了10个,那么该轮就需要再抽15个啦。
那公式应该就是 NEEDNUM=EVRYTIME-SELECTOUT。

但应该怎么描述下一轮要抽多少呢?
再比如我已经抽了30个,那应该怎么通过逻辑表示出呢?需要增加其他变量吗?

就是那个已抽出的量困扰了我好多天,感谢各位指教一下了。

回复列表 (共12个回复)

沙发

最简单的方法就是把该等级获奖的总人数设成常量,然后设一个该等级剩余中奖名额的变量,初始为前面说的常量,每轮递减,最后减到0

板凳

total我是设了个数组来记录各个等级的数量的,也就是常量了

总剩余数的话total-selectout可以算出,但怎样可以得出每轮的剩余数呢?

3 楼

我先等着——以后慢慢看

4 楼

对这个话题感兴趣的朋友一起交流下哈~
[img]http://i3.6.cn/cvbnm/3e/de/4f/a70692c20c146669c71a74f022298b2c.jpg[/img]

5 楼

我一开始可能弄错你的问题了了。你一开始问的是“下一轮应该抽出的人数”
其实这个问题跟别的都没关系,主要要看,你每轮抽奖的人数到底是相同的还是公式计算的
如果是公式计算的,单独列出这个变量
如果是固定的,增加相应常量

6 楼

每轮设定数量是固定的,就是EVERYTIME保存的,但每轮会有没抽完就意外中断的可能。所以继续抽的话应该就先抽完上次未完成的,再抽下一轮。
比如
共100个名额,每轮要抽10个,总共已抽出18个,那么本轮就剩下2个要抽,下轮就继续抽10个。

就是这个逻辑了。不知该如何用简单的代码表达

7 楼

哈哈,终于想到了~~~想不到是要求余····

初始化
For ii = 1 To Val(GetINI("奖项名称", "no"))
total(ii) = Val(GetINI("奖项设置", "level" & ii))
everytime(ii) = Val(GetINI("奖项设置", "mc" & ii))
selectout(ii) = Val(GetINI("中奖数记录", "level" & ii))
If (total(ii) - selectout(ii)) Mod everytime(ii) > 0 Then
    neednum(ii) = (total(ii) - selectout(ii)) Mod everytime(ii)
Else
    neednum(ii) = everytime(ii)
End If
selected(ii) = selectout(ii)
Next ii

然后每次调用就  selected(ii) = selected(ii)+1
再把selected(ii)写回INI文件

再刷新各个数
For ii = 1 To Val(GetINI("奖项名称", "no"))
selectout(ii) = Val(GetINI("中奖数记录", "level" & ii))
If (total(ii) - selectout(ii)) Mod everytime(ii) > 0 Then
    neednum(ii) = (total(ii) - selectout(ii)) Mod everytime(ii)
Else
    neednum(ii) = everytime(ii)
End If
Next ii

不知有没有简单点的方法~

8 楼

楼主,你的高尚情操太让人感动了。

9 楼

兰州是无效信

10 楼

哪用这么麻烦啊……
每次是常量的话
剩余本奖=剩余本奖-每轮+本轮剩余
不就可以了,抽奖那里返回一个本轮还剩几个本级奖名额就好了

我来回复

您尚未登录,请登录后再回复。点此登录或注册