撸一发枚举勾股数组的问题
二十分钟前看到百度知道里有人问为什么勾与股的限制均为1-10000时,这个枚举软件能在10秒不到的时间算完。我就自己试了试。。。尼玛竟然18秒,如图所示:检查了一下自己的算法貌似是没问题的,于是就在想是不是代码编译的问题,于是把高级优化的所有的勾打上了,然后,结果是17秒。。。
然后就想是不是电脑配置的问题,测试下来影响并不大。前面的两个测试结果均是在2.67GHz CPU+512MB RAM的虚拟机测试的,而这次我在Intel Xeon x5650+16GB RAM的物理机上测试了一遍,结果是15秒。。。
我擦。。。貌似配置的影响也不是很大啊。
谁来告诉我为什么!!!
贴代码了,先贴按钮的事件代码:
Private Sub Command1_Click()
Dim StGou As Long, SpGou As Long
Dim StGu As Long, SpGu As Long
Dim MyXian As Double
Dim LvX As ListItem, LvC As Long
Dim ETime As Long
Dim FTime As SYSTEMTIME, CTime As SYSTEMTIME
Call GetLocalTime(FTime)
LvC = 0
StGou = CLng(Text1.Text)
StGu = CLng(Text2.Text)
SpGou = CLng(Text3.Text)
SpGu = CLng(Text4.Text)
Dim i As Long, j As Long
PB.Value = 0
PB.Max = SpGou - StGou + 1
Lv1.ListItems.Clear
For i = StGou To SpGou Step 1
For j = i To SpGu Step 1
MyXian = Sqr(i ^ 2 + j ^ 2)
If (Int(MyXian) = MyXian) Then
LvC = LvC + 1
Set LvX = Lv1.ListItems.Add(LvC, , i)
LvX.ListSubItems.Add 1, , j
LvX.ListSubItems.Add 2, , MyXian
End If
Next j
PB.Value = PB.Value + 1
Next i
Call GetLocalTime(CTime)
ETime = SubTime(FTime, CTime)
SB.Panels.Item(1).Text = "勾股数组个数:" & LvC
SB.Panels.Item(3).Text = "耗时:" & ETime & "秒"
End Sub
其中SB是StatusBar控件,PB是ProgressBar控件,Lv1是ListView控件
其中有个函数叫做SubTime,其代码实现是:
Private Function SubTime(ByRef FirstTime As SYSTEMTIME, ByRef NextTime As SYSTEMTIME) As Long
Dim ws As Integer
Dim wmin As Integer
Dim wh As Integer
Dim wd As Integer
ws = NextTime.wSecond - FirstTime.wSecond
wmin = NextTime.wMinute - FirstTime.wMinute
wh = NextTime.wHour - FirstTime.wHour
wd = NextTime.wDay - FirstTime.wDay
SubTime = ws + wmin * 60 + wh * 3600 + wd * 86400
End Function
貌似不够严谨,如果是在跨月份的半夜执行这个函数就会出问题。这个BUG大家可以自己去修复。
百度知道的链接是在http://zhidao.baidu.com/question/984385218752419859.html?entry=qb_ihome_tag
好像很吊的样子。
页:
[1]