| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1249 人关注过本帖
标题:2W积分求一算法
只看楼主 加入收藏
阳光白雪
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:39
帖 子:2220
专家分:0
注 册:2005-11-18
收藏
得分:0 
以下是引用MicroSoft在2007-7-3 10:57:52的发言:
刚才你说什么了?
来晚了,没看到......
你去水区开个帖子吧,不过只能给你5000,因为确实没达到我要的效果......

不是这13个数,是13层.......
不好意思啊,这2W暂时不能给你......
要是13个数,我一个一个算也能算出来了


不过我自己已经搞出来了.能算任意点下面的13层.



积分又没用,我要那做什么,再说也没达到你要的效果!

我晕,不是发现你是hxfly的马甲,我会把你骂的很惨,忽视我的劳动我就是不客气!


专注于WEB前端交互平台开发:[url=http://blog./]blog.[/url](富客户端技术(RIA)交流平台)
2007-07-03 11:30
MicroSoft
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:2
帖 子:499
专家分:3
注 册:2006-10-12
收藏
得分:0 
以下是引用麻花疼在2007-7-3 11:25:33的发言:

怎么个搞法啊,说说看啊

我只说思路

1,把任意点看成是顶点,要查询这个点的等级,那么只要是他的体系内的所有的点的前N位(N为这个顶点的等级长度)都和这个顶点的等级号相同,按照这个生成SQL语句,让他们按照等级的长度排列,按照等级数字的大小排列,这样查出来的结果就是按照正常顺序排列的结果了
2,按照查出来的结果循环记录集的每一个点,查找比这个点的长度多1,而且前M位(当前记录等级的长度)和这个点的等级相同的点.因为每个点下边最多有两个点,所以如果查询记录数是0,则说明这个点下边没有记录,则该点的等级&"1"就是新增点的等级,跳出循环;如果查询记录数是1,则说明他底下已经有了1个点,则该点的等级&"2"就是新增点的等级,跳出循环;如果结果记录条数是2,则说明该点下级已经满了,继续查找下个点.

这样就能查出新增点的等级数了.

我的思路应该还算清晰,就是表达的可能很乱.


[glow=255,green,2]相信微软,相信我!~[/glow]
2007-07-03 11:54
MicroSoft
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:2
帖 子:499
专家分:3
注 册:2006-10-12
收藏
得分:0 
以下是引用阳光白雪在2007-7-3 11:30:13的发言:

不是这13个数,是13层.......
不好意思啊,这2W暂时不能给你......
要是13个数,我一个一个算也能算出来了


不过我自己已经搞出来了.能算任意点下面的13层.



积分又没用,我要那做什么,再说也没达到你要的效果!

我晕,不是发现你是hxfly的马甲,我会把你骂的很惨,忽视我的劳动我就是不客气!

没忽视你的劳动啊,我感激没一个帮助我的人.谢谢了啊.....


[glow=255,green,2]相信微软,相信我!~[/glow]
2007-07-03 11:55
阳光白雪
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:39
帖 子:2220
专家分:0
注 册:2005-11-18
收藏
得分:0 
回复:(MicroSoft)以下是引用阳光白雪在2007-7-3 11...

<%
''dateArray存放二叉树实际所有节点的数组
''这里的一组数仅做参考,可从数据库中提取
Dim dateArray(13)
dateArray(0) = 1
dateArray(1) = 11
dateArray(2) = 12
dateArray(3) = 111
dateArray(4) = 112
dateArray(5) = 121
dateArray(6) = 122
dateArray(7) = 1111
dateArray(8) = 1112
dateArray(9) = 1121
dateArray(10) = 1122
dateArray(11) = 1211
dateArray(12) = 1221
dateArray(13) = 1222

Function getNullNote(dataArr,upLevelNote)
Dim upLevelNoteArr,IntI
Dim curLevelNote,IntK
Dim hasNode,IntJ
''根据上层(即父节点所在层)得出本存所有接点字符串,各节点值之间用“|”分隔
''例如:上级的父节点有“11,12”,则得出的结果curLevelNote = "111|112|121|122|"
upLevelNoteArr = Split(upLevelNote,"|")
For IntI = 0 To Ubound(upLevelNoteArr)
If upLevelNoteArr(IntI)<>"" And Not IsNull(upLevelNoteArr(IntI)) Then
curLevelNoteLeft = CStr(upLevelNoteArr(IntI))&"1"
curLevelNoteRight = CStr(upLevelNoteArr(IntI))&"2"
curLevelNote = curLevelNote & curLevelNoteLeft &"|"& curLevelNoteRight &"|"
End If
Next
''循环将当前层的应有节点与实际存在接点比较,
''如果在实际接点中不存在则说明该接点为空,输出该节点值,并跳出循环
curLevelNoteArr = Split(curLevelNote,"|")
For IntK = 0 To Ubound(curLevelNoteArr)
hasNode = False
If curLevelNoteArr(IntK)<>"" And Not IsNull(curLevelNoteArr(IntK)) Then
For IntJ = 0 To Ubound(dataArr)
If Cstr(curLevelNoteArr(IntK))=Cstr(dataArr(IntJ)) Then
hasNode = True
Exit For
End If
Next
If hasNode = False Then
Response.Write(Cstr(curLevelNoteArr(IntK)))
Exit Function
End If
End If
Next
''如果当前层的节点都存在,则将当前层作为父层继续检测其下层的节点
Call getNullNote(dataArr,curLevelNote)
End Function
Call getNullNote(dateArray,1)
%>

我只想说我并没有把你的问题当成13个数来看待,是你没明白我的意思,
“不是这13个数,是13层.......
不好意思啊,这2W暂时不能给你......
要是13个数,我一个一个算也能算出来了”
这句话让我感觉你是在侮辱我!


专注于WEB前端交互平台开发:[url=http://blog./]blog.[/url](富客户端技术(RIA)交流平台)
2007-07-03 12:08
MicroSoft
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:2
帖 子:499
专家分:3
注 册:2006-10-12
收藏
得分:0 
对不起,对不起啊.我改.......

[glow=255,green,2]相信微软,相信我!~[/glow]
2007-07-03 12:13
MicroSoft
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:2
帖 子:499
专家分:3
注 册:2006-10-12
收藏
得分:0 
不过我确实没看明白
Dim dateArray(13)
dateArray(0) = 1
dateArray(1) = 11
dateArray(2) = 12
dateArray(3) = 111
dateArray(4) = 112
dateArray(5) = 121
dateArray(6) = 122
dateArray(7) = 1111
dateArray(8) = 1112
dateArray(9) = 1121
dateArray(10) = 1122
dateArray(11) = 1211
dateArray(12) = 1221
dateArray(13) = 1222

这个是干什么用的.

[glow=255,green,2]相信微软,相信我!~[/glow]
2007-07-03 12:16
MicroSoft
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:2
帖 子:499
专家分:3
注 册:2006-10-12
收藏
得分:0 
明白了,你是把查询出来的全体记录数做为一个数组,然后根据数组的长度循环,对吧?
13只是一个例子,呵呵

[glow=255,green,2]相信微软,相信我!~[/glow]
2007-07-03 12:19
MicroSoft
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:2
帖 子:499
专家分:3
注 册:2006-10-12
收藏
得分:0 
For IntI = 0 To Ubound(upLevelNoteArr)
If upLevelNoteArr(IntI)<>"" And Not IsNull(upLevelNoteArr(IntI)) Then
curLevelNoteLeft = CStr(upLevelNoteArr(IntI))&"1"
curLevelNoteRight = CStr(upLevelNoteArr(IntI))&"2"
curLevelNote = curLevelNote & curLevelNoteLeft &"|"& curLevelNoteRight &"|"
End If
Next


和我的方法一个道理,但是你的更简单,这个我收下.谢谢
说到做到,2W积分给你也是你应该的
你就别小气了,消消气啊

去水区开个帖子吧......

[glow=255,green,2]相信微软,相信我!~[/glow]
2007-07-03 12:25
快速回复:2W积分求一算法
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.021614 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved