请各位大侠帮帮忙,写一个在考勤时间数组上插入一段加班时间的算法。

DreamManor 2004-08-12 11:23:22
考勤正班时间数组(数组个数为2的倍数,最长有9个时间段):
arrTime(0) = 08:00
arrTime(1) = 12:00

arrTime(2) = 14:00
arrTime(3) = 18:00
。。。
。。。

现在有一个加班时间段,例如 12:30-13:30
加班时间段需要按时间顺序插入以上数组中,形成以下数组:
arrTime(0) = 08:00
arrTime(1) = 12:00

arrTime(2) = 12:30
arrTime(3) = 13:30

arrTime(4) = 14:00
arrTime(5) = 18:00
。。。
。。。

加班时间段是不确定的,考勤正班时间数组的时间段也是不确定的,
如何写一段算法能将加班时间段插入到数组的正确位置上。

注意:加班时间段是不会与正班时间段重合的。



...全文
192 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
熊孩子开学喽 2004-08-13
  • 打赏
  • 举报
回复
数组加排序。
如果只是一般的加班时间的话,没有多少数据,随便用什么排序方法都可以。
DreamManor 2004-08-13
  • 打赏
  • 举报
回复
谢谢northwolves(狼行天下),

有没有其他的朋友再写写其他的算法,让我好有一个比较。

Zygodactyous(Zygodactyous) :
暂时不考虑休息日加班的情况
Zygodactyous 2004-08-13
  • 打赏
  • 举报
回复
有个新类型叫桶数据结构,没用过,有的人说很好,可以考虑使用
另:是不是还要考虑在休息日加班的情况(这可是经常发生的事儿),如在周六加班是,正班的时间段也变成加班的时间段了。
northwolves 2004-08-13
  • 打赏
  • 举报
回复
Sub inserttime(ByVal period As String, ByRef arrtime() As String)
Dim TEMP1 As String, TEMP2 As String, TEMP As Integer, I As Integer, MAX As Integer
TEMP1 = Trim(Split(period, "-")(0))
TEMP2 = Trim(Split(period, "-")(1))
MAX = UBound(arrtime)


For I = 1 To MAX - 1
If TEMP1 > arrtime(I - 1) Then TEMP = I
Next

If TEMP2 < arrtime(0) Then TEMP = 0
If TEMP1 > arrtime(MAX) Then TEMP = MAX

ReDim Preserve arrtime(MAX + 2)

For I = MAX + 2 To TEMP + 2 Step -1
arrtime(I) = arrtime(I - 2)
Next

arrtime(TEMP + 1) = TEMP2
arrtime(TEMP) = TEMP1

End Sub
Private Sub Command1_Click()
Dim arrtime() As String, I As Integer
ReDim arrtime(3)
arrtime(0) = "08:00"
arrtime(1) = "12:00"

arrtime(2) = "14:00"
arrtime(3) = "18:00"

MsgBox Join(arrtime, vbCrLf)
inserttime "12:30-13:30", arrtime
MsgBox Join(arrtime, vbCrLf)
End Sub


bubu198 2004-08-13
  • 打赏
  • 举报
回复
用 Collection(集合),因为可以在指定的位置插入新的成员
colTime.add time33 , , 4
Collection(集合)还可以删除指定位置的成员
colTime.remove,3
zhangzhijian 2004-08-13
  • 打赏
  • 举报
回复
两个都可以啊!
cqm2099 2004-08-13
  • 打赏
  • 举报
回复
学习。。。。。。。。。
lixishen 2004-08-13
  • 打赏
  • 举报
回复
不用数组嘛。用 Collection(集合)想放多少就放多少
northwolves 2004-08-13
  • 打赏
  • 举报
回复
数据不多,怎么排序也可以。
数据多可以考虑使用 COPYMEMORY 移动数组
也可以用LISTBOX 实现

'add a listbox(sort=true) and a commandbutton to form1:

Dim arrtime() As String
Private Sub Command1_Click()
Dim I As Integer
List1.AddItem Split("12:30-13:30", "-")(0)
List1.AddItem Split("12:30-13:30", "-")(1)
ReDim arrtime(List1.ListCount - 1)
For I = 0 To List1.ListCount - 1
arrtime(I) = List1.List(I)
Next
'MsgBox Join(arrtime, vbCrLf)
End Sub

Private Sub Form_Load()
Dim I As Integer
ReDim arrtime(3)
arrtime(0) = "08:00"
arrtime(1) = "12:00"
arrtime(2) = "14:00"
arrtime(3) = "18:00"
For I = 0 To UBound(arrtime)
List1.AddItem arrtime(I)
Next
End Sub
DreamManor 2004-08-12
  • 打赏
  • 举报
回复
rainstormmaster(暴风雨 v2.0):
能不能劳驾你帮我写一个效率最高的算法呢。
rainstormmaster 2004-08-12
  • 打赏
  • 举报
回复
用动态数组,先排序,找到插入位置,然后重新给数组赋值
或者直接给数组加一个元素,然后排序
DreamManor 2004-08-12
  • 打赏
  • 举报
回复
另外:
1。正班时间数组也可能是空的,即没有正班时间,只有加班时间。
2。如果加班时间段与正班时间段发生重合,则不插入加班时间段到数组中。
3。加班时间段正确插入后,还要得到加班时间段的插入位置,即加班时间段的数组索引。
你想当“李逍遥”式的“大侠”吗? 这里无需计算机基础,无需编程经验,你也不必是计算机专业的在校大学生....只要爱好游戏,怀揣梦想! 有一定自主学习能力,跟着刘老师从“编程小白”修炼为游戏研发“大虾”吧!!!学习好Unity,其先决条件是一定要有稳固、扎实的编程基础!课程 《C# For Unity系列之入门篇》配套学习资料链接:http://pan.baidu.com/s/1gflxreN 密码:sou5;刘老师讲Unity学员群(2) 497429806一、热更新系列(技术含量:中高级):A:《lua热更新技术中级篇》https://edu.csdn.net/course/detail/27087B:《热更新框架设计之Xlua基础视频课程》https://edu.csdn.net/course/detail/27110C:《热更新框架设计之热更流程与热补丁技术》https://edu.csdn.net/course/detail/27118D:《热更新框架设计之客户端热更框架(上)》https://edu.csdn.net/course/detail/27132E:《热更新框架设计之客户端热更框架(中)》https://edu.csdn.net/course/detail/27135F:《热更新框架设计之客户端热更框架(下)》https://edu.csdn.net/course/detail/27136二:框架设计系列(技术含量:中级): A:《游戏UI界面框架设计系列视频课程》https://edu.csdn.net/course/detail/27142B:《Unity客户端框架设计PureMVC篇视频课程(上)》https://edu.csdn.net/course/detail/27172C:《Unity客户端框架设计PureMVC篇视频课程(下)》https://edu.csdn.net/course/detail/27173D:《AssetBundle框架设计_框架篇视频课程》https://edu.csdn.net/course/detail/27169三、Unity脚本从入门到精通(技术含量:初级)A:《C# For Unity系列之入门篇》https://edu.csdn.net/course/detail/4560B:《C# For Unity系列之基础篇》https://edu.csdn.net/course/detail/4595C: 《C# For Unity系列之中级篇》https://edu.csdn.net/course/detail/24422D:《C# For Unity系列之进阶篇》https://edu.csdn.net/course/detail/24465四、虚拟现实(VR)与增强现实(AR):(技术含量:初级)A:《虚拟现实之汽车仿真模拟系统 》https://edu.csdn.net/course/detail/26618五、Unity基础课程系列(技术含量:初级) A:《台球游戏与FlappyBirds—Unity快速入门系列视频课程(第1部)》 https://edu.csdn.net/course/detail/24643B:《太空射击与移动端发布技术-Unity快速入门系列视频课程(第2部)》https://edu.csdn.net/course/detail/24645 C:《Unity ECS(二) 小试牛刀》https://edu.csdn.net/course/detail/27096六、Unity ARPG课程(技术含量:初中级):A:《MMOARPG地下守护神_单机版实战视频课程(上部)》https://edu.csdn.net/course/detail/24965B:《MMOARPG地下守护神_单机版实战视频课程(中部)》https://edu.csdn.net/course/detail/24968C:《MMOARPG地下守护神_单机版实战视频课程(下部)》https://edu.csdn.net/course/detail/24979

7,762

社区成员

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

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